2014-10-15 6 views
5

माना कि आप उपयोगकर्ता निर्धारित प्रकार इस प्रकार है कि है:सिंटेक्स

CREATE TYPE [dbo].[MyDefineType] As Table     
(
ID int NOT NULL 
, Column1 int NOT NULL 
, Column2 Nvarchar(128) NULL 
, Column3 Nvarchar(128) NULL 
, Column4 Nvarchar(128) NULL 
, Column5 Nvarchar(128) NULL  
) 

तो जब मैं एक संग्रहीत प्रक्रिया के माध्यम से एक महत्वपूर्ण तालिका पारित कर दिया, प्रकार के स्कीमा दर्पण तालिका।

मेरा प्रश्न यह है कि स्तंभों में से एक को डिफॉल्ट मान देने के लिए वाक्यविन्यास क्या है? उदाहरण के लिए, यदि मैंने इन मानों को एक लूप में संग्रहीत प्रक्रिया के माध्यम से पारित किया है, तो मैं कॉलम 5 को एक डिफ़ॉल्ट मान दे सकता हूं, इसलिए यदि मैंने केवल पहले 4 कॉलम के लिए मान पास किए हैं, तो 5 जो मैंने परिभाषित किया है उसे डिफॉल्ट करना होगा यदि नहीं मूल्य पारित किया गया था। क्या उपयोगकर्ता परिभाषित प्रकार के साथ यह संभव है?

+1

एक ही वाक्य रचना। '[नाम] [डेटा प्रकार] DEFAULT N'value'' –

उत्तर

6

सामान्य वाक्य रचना (CREATE TYPE देखते हैं, MSDN) का उपयोग करें:

(जैसा कि मेरे जवाब देने के लिए टिप्पणियों में नोट उचित सामान्य वाक्य रचना नामित की कमी उपयोग करने के लिए होगा, लेकिन तालिका प्रकार नामित बाधा उपयोग नहीं कर सकते और है "शॉर्टेंड" वाक्यविन्यास का उपयोग करने के लिए)।

CREATE TYPE [dbo].[MyDefineType] As Table     
(
    ID int NOT NULL DEFAULT 0 
, Column1 int NOT NULL DEFAULT 99 
, Column2 Nvarchar(128) NULL DEFAULT N'DefaultValue' 
, Column3 Nvarchar(128) NULL 
, Column4 Nvarchar(128) NULL 
, Column5 Nvarchar(128) NULL  
) 
उदाहरण के लिए

, पहले तीन स्तंभों पर चूक के साथ उपरोक्त परिभाषा का उपयोग करते हुए: एक नियमित रूप से तालिका के लिए एक इनलाइन डिफ़ॉल्ट बाधा के रूप में

DECLARE @t MyDefineType 
INSERT @t VALUES (1, DEFAULT, DEFAULT, N'c', N'd', N'e') 
SELECT * FROM @t 

ID Column1 Column2   Column3 Column4 Column5 
1 99  DefaultValue c  d  e 
+2

+1 लेकिन, निष्पक्ष होने के लिए, यह सारणी है कि तालिका प्रकारों और तालिका चर के लिए आवश्यक है, नियमित तालिकाओं के लिए सामान्य वाक्यविन्यास नहीं। नियमित तालिकाओं के लिए सर्वोत्तम अभ्यास स्पष्ट 'कन्स्ट्रेंट ... DEFAULT ... के लिए वाक्यविन्यास का उपयोग कर बाधा का नाम होना चाहिए। –

+0

@AaronBertrand हाँ, यह बहुत सच है; शायद मैं थोड़ा जल्दी था। – jpw

+1

हालांकि सर्वोत्तम अभ्यास टेबल प्रकारों के लिए काम नहीं करेगा क्योंकि उनमें बाधाओं का नाम नहीं हो सकता है। –

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