2012-09-05 58 views
0

我想在触发器中动态构建UPDATE语句,所以我需要一些与temp变量和长度相关的函数的帮助,并使用临时变量指定UPDATE中的字段/更新值声明:在INSERT触发器中动态构建UPDATE语句

stSQL as string 
stSQL = "" 

IF FieldA=<criteria> then 
stSQL = "FieldB = we_ci_db.dbo.ztblTest.FieldA" 
endif 

IF FieldG=<criteria> then 
if len(stSQL)>0 then stSQL=stSQL & " AND " 
stSQL = "FieldH = we_ci_db.dbo.ztblTest.FieldF" 
else 
if len(stSQL)>0 then stSQL=stSQL & " AND " 
stSQL = "FieldH = we_ci_db.dbo.ztblTest.FieldG" 
endif 

UPDATE ztblTest 
SET stSQL 
WHERE TestID IN (SELECT DISTINCT TestID FROM inserted) 

回答

2

它似乎并不像你对我需要建立一个字符串,使用动态SQL,或者有这些IF条件句。两个简单的内嵌CASE表达式似乎可以做到这一点:

UPDATE z 
SET FieldB = CASE WHEN i.FieldA = <criteria> THEN i.FieldA ELSE i.FieldB END, 
    FieldH = CASE WHEN i.FieldG = <criteria> THEN i.FieldF ELSE i.FieldG END 
FROM dbo.ztblTest AS z 
INNER JOIN inserted AS i 
ON z.TestID = i.TestID; 
+0

谢谢,更简单... – aSystemOverload