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)
我有一个 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)