2012-12-14 10 views
7

Dążąc do egzekwowania bardziej rygorystycznego bezpieczeństwa typu i ułatwienia wykrywania błędów, chciałbym wyraźnie określić typy kolumn mojego widoku.Czy mogę określić typy kolumn podczas tworzenia widoku programu SQL Server?

Ale gdy to działa:

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

to się nie powiedzie:

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

Czy jest poprawna składnia do tego?

Odpowiedz

18

SQL Server musi wydedukować typy - ale można wymusić swoją rękę, jeśli chcesz:

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

chodzi o zerowej/niepuste stronie rzeczy, znowu, SQL Server musi wydedukować to . Jeśli masz kolumnę znasz będzie not null ale SQL Server jest coraz to nieprawidłowe, można owinąć go w oświadczeniu ISNULL z niepuste drugi argument:

SELECT ISNULL(ColumnSQLServerThinksCanBeNull,'abc') 

a zostanie on opisać kolumnę jako not null. Druga wartość nie ma znaczenia (w końcu chodzi o moje własne stwierdzenie, że kolumna nigdy nie będzie miała wartości NULL), o ile jest zgodna z kolumną.

Powiązane problemy