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