【发布时间】:2016-05-27 19:02:13
【问题描述】:
我有一个 Microsoft SQL Server 触发器,它在本地数据库更新时用新值更新远程数据库。一切正常,我测试了脚本并且更新正常,除非有空值。
代码如下:
DECLARE @TSQL nvarchar(4000);
SELECT @TSQL =
'UPDATE
OPENQUERY(TEST,''SELECT * FROM test_db WHERE id = ' + convert(VARCHAR(MAX), @id) +''')
SET
parent_id = ' + convert(VARCHAR(MAX), @parent_id) + ', user_id = ' + convert(VARCHAR(MAX), @user_id) + ', item_id = ' + convert(VARCHAR(MAX), @item_id) + ''
EXEC (@TSQL)
如果所有字段都有值,则一切正常,但如果一列为空,则查询根本不会更新该行,不会引发错误。我尝试使用COALESCE() 将空变量更改为空字符串,然后它将更新行,但所有空列都变为0,我希望它们保持NULL 值。两个数据库中的所有列都允许空值并且默认为空,所以我不确定为什么我不能更新数据库。
任何帮助都会很好,谢谢!
【问题讨论】:
-
为什么要标记 MySQL?
-
忘了说我使用 openquery 与 MySql 数据库交互
-
您正在通过 SQL Server 连接到 MySQL?这听起来像是麻烦的秘诀。
NULL值不是字符串。他们需要以不同的方式进行转义。 -
是的,通过链接服务器对象
-
在使用空值运行 @TSQL 之前输出它。然后验证语法。我的猜测是你有一个语法错误,不知何故没有被报告。像... set parent_ID = 'NULL', user_ID = 'Null', item_ID = 'NULL' 但其中一列可能是数字?并且隐式转换失败了?
标签: sql-server tsql triggers openquery