2012-12-14 29 views
7

Tìm cách thực thi an toàn loại nghiêm ngặt hơn và giúp phát hiện sai lầm dễ dàng hơn, tôi muốn chỉ định rõ ràng các loại cột của chế độ xem của tôi.Tôi có thể chỉ định các loại cột khi tạo chế độ xem SQL Server không?

Nhưng trong khi làm việc này:

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

này không thành công:

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ó một cú pháp chính xác cho điều này?

Trả lời

18

SQL Server có để suy ra các loại - nhưng bạn có thể buộc tay của nó nếu bạn cần phải:

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

Đối với null/bên không null của sự vật, một lần nữa, SQL Server có để suy luận này . Nếu bạn có một cột mà bạn biết sẽ not null nhưng SQL Server là nhận được nó không chính xác, bạn có thể bọc nó trong một tuyên bố ISNULL với một số thứ hai không null:

SELECT ISNULL(ColumnSQLServerThinksCanBeNull,'abc') 

Và sau đó nó sẽ mô tả các cột như not null. Giá trị thứ hai không quan trọng (sau khi tất cả, điều này là về xác nhận của riêng tôi rằng cột sẽ không bao giờ là null), miễn là nó thuộc loại tương thích với cột.

Các vấn đề liên quan