T-SQL openquery 不更新 NULL 值

T-SQL openquery doesn't update on NULL value

我有一个 Microsoft SQL 服务器触发器,它在更新本地数据库时用新值更新远程数据库。一切正常,我测试了脚本并且它更新正常,除非存在空值。

代码如下:

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 值。两个数据库中的所有列都允许空值并默认为空,所以我不确定为什么我不能更新数据库。

任何帮助都会很好,谢谢!

试试这个。使用 ISNULL,如果值为 null,则在单引号中使用 'NULL'。当字符串连接在一起时,它不会保留引号,因此会将其设置为 NULL 值而不是 'NULL'.

的字符串
DECLARE @TSQL nvarchar(4000);
SELECT  @TSQL = 
    'UPDATE
        OPENQUERY(TEST,''SELECT * FROM test_db WHERE id = ' + convert(VARCHAR(MAX), @id) +''')
     SET
        parent_id = ' + ISNULL(convert(VARCHAR(MAX), @parent_id), 'NULL') + ', 
        user_id = ' + ISNULL(convert(VARCHAR(MAX), @user_id), 'NULL') + ', 
        item_id = ' + ISNULL(convert(VARCHAR(MAX), @item_id), 'NULL') + ''
EXEC (@TSQL)