2017-07-31 14 views
0

NULLを使用しないでnvarchar列をNULLに連結するにはどうすればいいですか? SELECTを使用してINSERTスクリプトを作成しますが、値がNULLの場合はNULLになります。Varchar SQL Server 2008でConcat NULLを使用

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 

このクエリは、値がnullでない場合に正しい挿入を返します。値がnullの場合は、NULL値ではなくvarcharとして挿入されるため、NULLが正しく挿入されません。私が ''を削除すると、全体の結果はnullになります。

+0

クエリを実行する前に 'keyNames'がnullであるかどうかチェックできませんか? –

+0

@JoshuaDuxburyもし私がそれを削除した場合、全体の結果はnullになります。これは+演算が数学と愚かなSQLサーバで動作するため、NULLを結果として文字列の残りの部分にNULLを追加しようとしているからです。 – Nogi

+0

私は、 'keyNames'はtblParamaterKeyテーブルから来ていますか? –

答えて

1

編集 - NULLIFステートメントをクエリ文字列内に置くと、それはの代わりに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

これは動作しません、これはちょうど例のクエリですが、多くの列があり、次にいくつかのnullableと私はnull値が必要なので、私は全体のテーブルのスクリプトを挿入する必要があります。 – Nogi

+0

私の編集@Nogiを参照してください –

+0

それはISNULL関数に 'NULL'の代わりにNULLを与えると同じことを行います、全体の結果はnullになります。それはworktますよう – Nogi

関連する問題