16

より厳密なタイプ セーフを強制し、間違いを検出しやすくするために、ビューの列の型を明示的に指定したいと考えています。

しかし、これが機能している間:

CREATE VIEW [dbo].[myview] (
    [a],
    [b],
    [c]
)
AS
SELECT 'a1', 'b1', 'c1';

これは失敗します:

CREATE VIEW [dbo].[myview] (
    [a] nvarchar(32) NOT NULL,
    [b] nvarchar(32) NOT NULL,
    [c] nvarchar(32) NOT NULL
)
AS
SELECT 'a1', 'b1', 'c1';

これには正しい構文がありますか?

4

1 に答える 1

26

SQL Server は型を推測する必要がありますが、必要に応じてその手を強制できます。

CREATE VIEW [dbo].[myview] (
    [a],
    [b],
    [c]
)
AS
SELECT
   CONVERT(nvarchar(32),'a1'),
   CONVERT(nvarchar(32),'b1'),
   CONVERT(nvarchar(32),'c1');

ヌル/非ヌル側についても、SQL Server はこれを推測する必要があります。あることがわかっている列があるnot nullが、SQL Server が正しく取得していない場合は、ISNULLnull 以外の 2 番目の引数を使用してステートメントでラップできます。

SELECT ISNULL(ColumnSQLServerThinksCanBeNull,'abc')

そして、列を として説明しますnot null。2 番目の値は、列と互換性のある型である限り、重要ではありません (結局のところ、これは列が null になることはないという私自身の主張に関するものです)。

于 2012-12-14T08:00:05.383 に答える