【发布时间】:2009-01-20 11:17:36
【问题描述】:
我需要遍历表上的字段并在其值不等于其默认值时执行某些操作。
我在触发器中,所以我知道表名。然后我循环遍历每个 使用此循环的字段:
select @field = 0, @maxfield = max(ORDINAL_POSITION) from
INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
...
然后我可以通过循环获取每次迭代的字段名称:
select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = @TableName
and ORDINAL_POSITION = @field
我可以得到该列的默认值:
select @ColDefault = SUBSTRING(Column_Default,2,LEN(Column_Default)-2)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE Table_Name = @TableName
AND Column_name = @fieldname
我拥有所需的一切,但我不知道如何比较两者。因为 我没有将字段名称作为常量,只有在变量中,我看不到 如何从“插入”表中获取值(记住我在触发器中) 为了查看它是否与默认值相同(现在保存在 @ColDefault 作为 varchar)。
【问题讨论】:
标签: sql-server triggers default