2012-12-14 5 views
7

Cercando di imporre una sicurezza di tipo più rigorosa e facilitare l'individuazione degli errori, vorrei specificare esplicitamente i tipi di colonna della mia vista.Posso specificare i tipi di colonna quando si crea una vista di SQL Server?

Ma mentre questo funziona:

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

questo non riesce:

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

C'è una sintassi corretta per questo?

risposta

18

SQL Server deve dedurre i tipi - ma è possibile forzare la mano se avete bisogno di:

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

Per quanto riguarda il nulla/lato non nulla delle cose, ancora una volta, SQL Server deve dedurre questo . Se si dispone di una colonna che si sa sarà not null ma SQL Server è ottenerlo errato, si può avvolgere in un ISNULL dichiarazione con un non-null secondo argomento:

SELECT ISNULL(ColumnSQLServerThinksCanBeNull,'abc') 

e sarà poi descrivere la colonna come not null. Il secondo valore non ha importanza (dopotutto, si tratta della mia affermazione che la colonna non sarà mai nulla), purché sia ​​di un tipo compatibile alla colonna.

Problemi correlati