2013-02-28 56 views
-1

是否可以在UPDATE()中使用變量來檢查列是否已更新?如果列已更新,則使用變量UPDATE()檢查器

這裏是我的示例代碼:

DECLARE @ColumnCount int 
DECLARE @ColumnCounter int 
DECLARE @ColumnName nvarchar(MAX) 

SET @ColumnCounter = 0 

SELECT @ColumnCount = COUNT(c.COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS c WHERE c.TABLE_NAME = 'Province' 
    WHILE @ColumnCount >= @ColumnCounter 
    BEGIN 
     SELECT @ColumnName = c.COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS c WHERE c.TABLE_NAME = 'Province' AND c.ORDINAL_POSITION = @ColumnCounter 
     IF (UPDATE(@ColumnName)) 
     SET @ColumnCounter = @ColumnCounter + 1 
    END 
+0

你是不是想告訴我們,如果@ColumnName變量已被上面的select更新了嗎? – darin 2013-02-28 04:06:17

+0

是的,我正在嘗試檢查列是否已更新 – 2013-02-28 04:11:59

+0

然後,您只需將其設置爲null,然後檢查它是否不爲空。我會在下面的答案中爲你寫。 – darin 2013-02-28 04:18:22

回答

1

有幾件事情: 您可能希望通過循環處理的第一時間,因爲名稱不會改變,通過第一次。 您可能想要在@ColumnName爲null時處理,因爲這意味着您的查詢未返回行,儘管您的查詢應始終返回一個值。

DECLARE @ColumnCount INT 
DECLARE @ColumnCounter INT 
DECLARE @ColumnName NVARCHAR(max) 
DECLARE @temp varchar(max) 

SET @ColumnCounter = 0 

SELECT @ColumnCount = Count(c.column_name) 
FROM information_schema.columns c 
WHERE c.table_name = 'Province' 

WHILE @ColumnCount >= @ColumnCounter 
    BEGIN 
     SET @ColumnName = NULL 

     SELECT @ColumnName = c.column_name 
     FROM information_schema.columns c 
     WHERE c.table_name = 'Province' 
      AND c.ordinal_position = @ColumnCounter 

     IF (@ColumnName != @temp) 
     BEGIN 
     --do something 
     END 
     SET @temp = @ColumnName 
     SET @ColumnCounter = @ColumnCounter + 1 
    END 
+0

謝謝我會稍後再試XD – 2013-02-28 05:20:15

+0

嗯如何檢查列是否更新?我的代碼是在更新 – 2013-02-28 05:47:20

+0

後放在觸發器中哦,觸發器部分在任何地方都沒有提及。您無法檢查觸發器中語句的變量名稱。請參閱下面的答案。 – darin 2013-02-28 14:08:25

2

檢查列實際更新更新觸發 後,您可以使用deletedinserted特殊表中msdn觸發代碼可以找到更新表

記住它的新版本和舊版本的行有可能在每個表格中找到多於一行。比如你在觸發行數由some_condition影響執行update table1 set col1 = value1 where some_condition,將在inserteddeleted

提交找出觸發在哪些行一些列實際更新,你可以加入插入,在一些主要刪除的表此列

update()函數採用作爲參數的列名不是一個刺變量與名作爲值的鍵和比較值

例如在觸發器使用update()檢查thisupdate(some_column)爲真時some_column存在於更新set聲明中,列值的偶數值不變。

好像你不能寫通用觸發計數列數更新,如果你需要計算你需要手動寫觸發每個表somethig這樣

declare @count int = 0 
if update(col1) set @count = @count + 1 
if update(col2) set @count = @count + 1 
... 
相關問題