2012-12-14 10 views
7

अधिक सख्त प्रकार की सुरक्षा को लागू करने और गलतियों का पता लगाना आसान बनाने के लिए, मैं स्पष्ट रूप से मेरे दृश्य के कॉलम प्रकार निर्दिष्ट करना चाहता हूं।क्या SQL सर्वर दृश्य बनाते समय मैं कॉलम प्रकार निर्दिष्ट कर सकता हूं?

लेकिन जब यह काम करता है:

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'; 

वहाँ इस के लिए एक सही सिंटैक्स है?

उत्तर

18

एसक्यूएल सर्वर प्रकार निकालना है - लेकिन आप की जरूरत है अगर आप अपने हाथ के लिए मजबूर कर सकते हैं:

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

अशक्त/चीजों की गैर-शून्य पक्ष का सवाल है, फिर से, एसक्यूएल सर्वर इस निकालना है । आप एक स्तंभ है कि आप not null हो जाएगा पता है, लेकिन एसक्यूएल सर्वर यह गलत हो रहा है है, तो आप एक गैर-शून्य दूसरा तर्क के साथ एक ISNULL बयान में लपेट कर सकते हैं:

SELECT ISNULL(ColumnSQLServerThinksCanBeNull,'abc') 

और यह तब के रूप में स्तंभ का वर्णन करेंगे not null। दूसरा मान कोई फर्क नहीं पड़ता (आखिरकार, यह मेरे अपने दावे के बारे में है कि कॉलम कभी भी शून्य नहीं होगा), जब तक कि यह कॉलम के अनुकूल प्रकार का हो।

संबंधित मुद्दे