1

SQLServer2008の使用。

これが私の問題の簡単な例です:

WITH    cte ( a )
          AS ( SELECT   1
               UNION ALL
               SELECT   NULL
             )
SELECT * INTO a_tmp FROM cte

SELECT * FROM a_tmp

a_tmpこれにより、null許容のint列で呼び出されるテーブルが作成されます。

ただし、次のスニペットは、null許容でない列を持つテーブルを作成します。

WITH    cte ( a )
        AS ( SELECT   1
        UNION ALL
        SELECT   2
            )
SELECT * INTO a_tmp FROM cte

2番目のスニペットを変更して、すべての列をnull許容でテーブルを強制的に作成するにはどうすればよいですか?

4

3 に答える 3

3

NULL一般に、これらはラップされない限り -ableとして扱われるため、計算式にします。ISNULL()

WITH    cte ( a )
        AS ( SELECT   CAST(1 AS INT)
        UNION ALL
        SELECT   2
            )
SELECT * INTO a_tmp FROM cte
于 2011-09-27T12:42:53.533 に答える
2

テーブルでフィールドを null 許容として明示的に定義する場合、正しい方法は を使用することCREATE TABLEです。

回避策として、すべてのフィールドをデータ型として明示的にキャストすることができますが、私には、それは単により多くの作業のように思えます

CREATE TABLE MyTable (id INT NULL, Otherfield varchar(100)...)

于 2011-09-27T12:45:22.647 に答える
1

を使用するSELECT ... INTOと、組み込み関数 (CAST など) を使用する式はすべて、エンジンによって NULL 許容と見なされます。

したがって、使用するCAST(somecol as int)場合、式は NULLable です。

于 2011-09-27T12:46:54.340 に答える