问题描述
我正在尝试使用存储过程将一些字符串值插入带有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,@id) +''')
SET
val_a = ''' + ISNULL(convert(VARCHAR(MAX),'NULL') + ''';'
EXEC (@Tsql)
但是在这里,NULL
是作为字符串'NULL'
而不是作为NULL
值插入的。
是否可以通过将NULL
和'asdf'
都正确插入表中的形式编写TSQL查询?
解决方法
您可以这样使用:
val_a = ' + ISNULL(convert(VARCHAR(MAX),'''' + @val_a + ''''),'NULL') + ';'