परिदृश्य:
आप SQL सर्वर डेवलपर के रूप में काम कर रहे हैं। आपको यह आवश्यकता मिली है जिसमें आपको SQL सर्वर डेटाबेस में सभी तालिकाओं पर सभी पहचान स्तंभों पर प्राथमिक कुंजी प्रतिबंध बनाना होगा यदि मौजूद नहीं है।प्राथमिक कुंजी का नाम Pk_SchemaName_TableName_ColumnName होना चाहिए।
समाधान:
सबसे पहले हमें उन तालिकाओं की सूची प्राप्त करने की आवश्यकता है जिनमें पहचान कॉलम है और उन पर प्राथमिक कुंजी बाधा नहीं बनाई गई है। हम उन सभी तालिकाओं को पहचान कॉलम के साथ प्राप्त करने के लिए सिस्टम टेबल और सिस्टम व्यू का उपयोग करेंगे जिनमें प्राथमिक कुंजी बाधाएं नहीं हैं।फिर हम प्राथमिक कुंजी बाधा जोड़ने और स्क्रिप्ट निष्पादित करने के लिए तालिका के लिए परिवर्तन कथन उत्पन्न करने के लिए गतिशील एसक्यूएल के साथ कर्सर का उपयोग करने जा रहे हैं। ) DECLARE @SchemaName AS VARCHAR(128)DECLARE @TableName AS VARCHAR(128)DECLARE @ColumnName as VARCHAR(128)DECLARE CUR CURSORFOR--पहचान कॉलम के साथ टेबल की सूची प्राप्त करें--जिस पर कोई प्राथमिक कुंजी नहीं है, डेटाबेस नाम के रूप में चयन करें DB_Name() ,Schema_Name(Schema_id) AS TableSchema ,OBJECT_NAME(c.OBJECT_ID) AS TableName ,c.NAME AS ColumnNameFROM sys.columns cINNER जॉइन sys.tables t ON c.object_id =t.object_idWHERE is_identity =1 ANDER_TABLE' ANDER_TABLE' ANDER_TABLE' चुनें .Table_Catalog AS DatabaseName, TC.Table_Schema AS TableSchema, TC.Table_Name AS TableName, CCU.Column_Name AS ColumnNameFROM Information_Schema.Table_Constraints TCINNER JOIN Information_Schema.constraint_column_usage CCU
TC.Constraint_Name =CCU.Constraint_Name और TC.Table_Name =CCU.Table_NameWHERE Constraint_Type ='प्राथमिक कुंजी' पर CurFETCH NEXTFROM CurINTO @DatabaseName,@SchemaName,@TableName,@ColumnNameWHILE @@FETCH का निर्माण करें। प्रत्येक डेटाबेस के लिए DECLARE @SQL VARCHAR(MAX) =NULL SET @SQL ='तालिका बदलें [' + @SchemaName + ']। [' + @TableName + ']' + CHAR(10) SET @SQL +='प्रतिबंध जोड़ें [Pk_' + @SchemaName
+ '_' + @TableName
+ '_' + @ColumnName + ']' SET @SQL +='प्राथमिक कुंजी ([' + @ColumnName + '])' EXEC (@SQL) प्रिंट @SQL कर्व से आगे @DatabaseName,@ SchemaName ,@TableName ,@ColumnNameENDCLOSE CurDEALLOCATE Curयदि आप प्राथमिक कुंजी बाधा जोड़ने के लिए केवल परिवर्तन कथन उत्पन्न करना चाहते हैं, तो आप Exec(@SQL) भाग में टिप्पणी जोड़ सकते हैं, उपरोक्त स्क्रिप्ट आल्टर स्टेटमेंट प्रिंट करेगी और आप अपनी सुविधानुसार चला सकते हैं।
यदि आप नहीं करते हैं 'प्राथमिक कुंजी बाधा में स्कीमा नाम भाग जोड़ना पसंद नहीं है, आप @SchemaName को हटा सकते हैं।
मैंने उपरोक्त क्वेरी निष्पादित की और इसने पहचान कॉलम पर प्राथमिक कुंजी बाधा बनाई जहां यह गायब थी। पहचान कॉलम में प्राथमिक कुंजी बाधा जोड़ने के लिए स्क्रिप्ट द्वारा उत्पन्न स्क्रिप्ट को बदलें
मैंने सत्यापित किया तालिकाओं और प्राथमिक कुंजी बाधाओं को सफलतापूर्वक बनाया गया था। SQL सर्वर डेटाबेस में पहचान कॉलम पर प्राथमिक कुंजी बाधा कैसे बनाएं