使用 TSQL 的 Openquery:如何在 nvarchar 列中插入 NULL?

Openquery with TSQL: how to insert NULL in nvarchar column?

我正在尝试使用存储过程将一些字符串值插入带有 Openquery 的远程数据库中。参数 @val_a 有时可以是一些随机字符串,但有时可以是 NULL.

如果 @val_aNULL,则以下语法有效,但如果它是字符串 'asdf'.

,则无效
DECLARE @TSQL nvarchar(4000);
SELECT  @TSQL = 
    'UPDATE
        OPENQUERY(TEST,''SELECT * FROM test_db WHERE id = ' + convert(VARCHAR(MAX), @id) +''')
     SET
        val_a = ' + ISNULL(convert(VARCHAR(MAX), @val_a), 'NULL') + ';'
EXEC (@TSQL)

但是,为了使用字符串 'asdf',语法如下所示:

DECLARE @TSQL nvarchar(4000);
SELECT  @TSQL = 
    'UPDATE
        OPENQUERY(TEST,''SELECT * FROM test_db WHERE id = ' + convert(VARCHAR(MAX), @id) +''')
     SET
        val_a = ''' + ISNULL(convert(VARCHAR(MAX), @val_a), 'NULL') + ''';'
EXEC (@TSQL)

但是在这里,NULLs 作为字符串 'NULL' 插入,而不是作为 NULL 值插入。

有没有一种方法可以将 NULL'asdf' 都正确插入到 table 中?

你可以这样使用:

val_a = ' + ISNULL(convert(VARCHAR(MAX), '''' + @val_a + ''''), 'NULL') + ';'