使用 TSQL 的 Openquery:如何在 nvarchar 列中插入 NULL?
Openquery with TSQL: how to insert NULL in nvarchar column?
我正在尝试使用存储过程将一些字符串值插入带有 Openquery 的远程数据库中。参数 @val_a
有时可以是一些随机字符串,但有时可以是 NULL
.
如果 @val_a
是 NULL
,则以下语法有效,但如果它是字符串 '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)
但是在这里,NULL
s 作为字符串 'NULL'
插入,而不是作为 NULL
值插入。
有没有一种方法可以将 NULL
和 'asdf'
都正确插入到 table 中?
你可以这样使用:
val_a = ' + ISNULL(convert(VARCHAR(MAX), '''' + @val_a + ''''), 'NULL') + ';'
我正在尝试使用存储过程将一些字符串值插入带有 Openquery 的远程数据库中。参数 @val_a
有时可以是一些随机字符串,但有时可以是 NULL
.
如果 @val_a
是 NULL
,则以下语法有效,但如果它是字符串 '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)
但是在这里,NULL
s 作为字符串 'NULL'
插入,而不是作为 NULL
值插入。
有没有一种方法可以将 NULL
和 'asdf'
都正确插入到 table 中?
你可以这样使用:
val_a = ' + ISNULL(convert(VARCHAR(MAX), '''' + @val_a + ''''), 'NULL') + ';'