SQL Server 2012 (triggers) Operand type clash: int is incompatible with date -


i building trigger log changes in table. when column in table datetime works fine. if change date throws error when edit row:

operand type clash: int incompatible date

how can check if date , if convert datetime?

here code (where @item contains name of each column):

select * #temptrigt (select * deleted @action in ( 'u','d')) union (select * inserted @action ='i')   set @sql = ''   if @action = 'u' begin select @sql = @sql + 'case when isnull(i.[' + column_name +   '],0) = isnull(d.[' + column_name + '],0) ''''    else ' + quotename(column_name, char(39)) + ' + '',''' + ' end +'  information_schema.columns   table_name = 'formfields' , column_name <>'rowguid' , column_name <>'modifieddate' --define output parameter  set @parmdefinition = '@outstring varchar(max) output'  --format sql  set @sql = 'select @outstring = '   + substring(@sql,1 , len(@sql) -1) +   ' dbo.formfields  ' --will need updated target schema  + ' inner join #temptrigt d on  i.id = d.id'  --will need updated target schema  --execute sql , retrieve desired column list in output parameter  exec sp_executesql @sql, @parmdefinition, @outstring out   end  declare @items varchar(max)    set @items = @outstring;   declare @item varchar(50)  declare @pos int  declare @loop bit  select @loop = case when len(@outstring) > 0 1 else 0 end  while (select @loop) = 1  begin  select @pos = charindex(',', @outstring, 1)  if @pos > 0  begin  select @item = substring(@outstring, 1, @pos - 1)  select @outstring = substring(@outstring, @pos + 1, len(@outstring) - @pos) ----------------------------------  set @audit_field = @item;  set @sql = 'select @audit_oldvalue=[' +@item +'] #temptrigt'; exec sp_executesql @sql,n'@audit_oldvalue sql_variant output',@audit_oldvalue output -- if inserted @audit_oldvalue gets new value  set @sql = 'select @audit_value=i.[' +@item +'] dbo.formfields  inner join #temptrigt d on i.id = d.id'; exec sp_executesql @sql,n'@audit_value sql_variant output',@audit_value output   if @action = 'u' begin     insert [dbo].[audittrailformfields]([tsid],[tsfield],[oldvalue],[newvalue],[changedate],[change_action],[change_user],[columns_updated])     select id,@audit_field, @audit_oldvalue, @audit_value,getdate(),@action, coalesce(modifiedby,suser_name()), @items     inserted   end 

select @sql = @sql +      'case when isnull(i.[' + column_name +   '],' + case data_type          when 'uniqueidentifier' '''0'''          when 'varchar' char(39) + '-' + char(39)          when 'nvarchar' char(39) + '-' + char(39)          when 'date' char(39) + '1/1/1900' + char(39)          when 'datetime' char(39) + '1/1/1900 00:00:00' + char(39)          else '0'        end + ') = isnull(d.[' + column_name + '],'+        case data_type          when 'uniqueidentifier' '''0'''          when 'varchar' char(39) + '-' + char(39)          when 'nvarchar' char(39) + '-' + char(39)          when 'date' char(39) + '1/1/1900' + char(39)          when 'datetime' char(39) + '1/1/1900 00:00:00' + char(39)          else '0'        end + ') ''''    else ' + quotename(column_name, char(39)) + ' + '',''' + ' end +' information_schema.columns   table_name = 'ctformfields' , column_name <>'rowguid' , column_name <>'modifieddate' 

Comments

Popular posts from this blog

neo4j - finding mutual friends in a cypher statement starting with three or more persons -

php - How to remove letter in front of the word laravel -

minify - Minimizing css files -