2017-07-31 124 views
0

我想问如何连接一个nvarchar列与NULL没有得到NULL?我想用SELECT创建一个INSERT脚本,但是当任何值为NULL时,我只能得到NULLConcat NULL与Varchar SQL Server 2008

SELECT TOP 10 
    'IF NOT EXISTS(SELECT 1 FROM tblParameterKey 
        WHERE keyNames=''' 
     + CAST(ISNULL([keyNames], 'NULL') AS NVARCHAR(255)) + ''') 
    BEGIN 
     INSERT INTO tblParameterKey VALUES(''' + CAST(ISNULL([keyNames], 'NULL') AS NVARCHAR(255))+''') 
    END' 
FROM tblParameterKey 

当值不为空时,此查询将返回正确的insert inly。如果value为null,则返回插入'NULL',这是不正确的,因为它将作为varchar插入,而不是作为空值插入。如果我删除'',整个结果将变为空。

+0

你能否在执行查询之前检查'keyNames'是否为空? –

+0

@JoshuaDuxbury如果我删除它,整个结果将为空。这是因为+在数学和愚蠢的SQL服务器试图将NULL添加到字符串的其余部分,因此导致NULL。 – Nogi

+0

我看到,是'keyNames'来自tblParamaterKey表吗? –

回答

1

编辑 - 也许把NULLIF语句内部的查询字符串,这将是null而不是string null

SELECT TOP 10 
    'IF NOT EXISTS(SELECT 1 FROM tblParameterKey 
        WHERE keyNames=NULLIF(''' 
     + [keyNames] + ''', 'NULL') AS NVARCHAR(255)) 
    BEGIN 
     INSERT INTO tblParameterKey VALUES(NULLIF(''' + [keyNames]+''', 'NULL') AS NVARCHAR(255)) 
    END' 
FROM tblParameterKey 
+0

这将无法正常工作,这只是和示例查询,有很多列和一些然后可以为空,我需要插入整个表的脚本,所以我需要空值。 – Nogi

+0

请参阅我的编辑@Nogi –

+0

这将完成向NULL函数提供NULL而不是'NULL'的操作,整个结果将为空。 – Nogi