如果value为NULL或Blank,则删除列上的更新

时间:2015-08-03 22:30:19

标签: sql-server tsql

编辑背景

我正在开发一个定期用空白数据覆盖列的应用。它是一个相对简单的SQL数据库的专有前端。我没有访问前端代码,这个表中的数据主要是静态的,一旦输入它就不应该改变,永远不应该是空白。我想通过删除导致某些列设置为nullblank

的更新来尝试从后端(我唯一的选项)解决此问题

如果列已经填充了数据,那么阻止nullName更新的最优雅方法是什么?例如,如果您的nvarchar列John Smith的值为''且更新过程在NULLJohn Smith中传递,则保留值Jane Doe有另一个名称 JSONObject object = new JSONObject(result); JSONObject obj1 = object.getJSONObject("query"); JSONObject obj2 = obj1.getJSONObject("pages"); JSONObject obj3=null; Iterator<String> keys= obj2.keys(); while (keys.hasNext()) { String keyValue = (String)keys.next(); obj3 = obj2.getJSONObject(keyValue); } String desc = obj3.getString("extract"); 继续更新。首先想到的是使用触发器执行此操作,但我知道这些可能会很混乱并影响正在执行的其他代码。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用BEFORE UPDATE触发器,您可以这样做:

CREATE TRIGGER YourTable_ConditionalUpdate
   ON YourTable
   INSTEAD OF UPDATE
AS 
BEGIN   
UPDATE YourTable SET  /* update all fields from original update except Name field */
    Field1 = i.Field1,
    Field2 = i.Field2,
    Field3 = i.Field3
FROM YourTable 
INNER JOIN Inserted i ON i.PrimaryKey = YourTable.PrimaryKey

UPDATE YourTable SET  /* update Name only if it's not empty */
    Name = i.Name
FROM YourTable
INNER JOIN Inserted i ON i.PrimaryKey = YourTable.PrimaryKey
WHERE NULLIF(i.Name, '') Is NOT NULL
END