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

问题描述

我正在尝试使用存储过程将一些字符串值插入带有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,@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') + ';'

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...