Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

मौजूदा तालिका में ANSI_NULLS विकल्प अपडेट करें

यह डेटाबेस व्यवस्थापकों पर क्रॉस पोस्ट किया गया था इसलिए मैं भविष्य के खोजकर्ताओं की सहायता के लिए अपना उत्तर यहां से भी पोस्ट कर सकता हूं।

यह केवल मेटाडेटा के रूप में किया जा सकता है (यानी सभी डेटा को एक नई तालिका में माइग्रेट किए बिना) ALTER TABLE ... SWITCH का उपयोग करके। .

उदाहरण कोड नीचे

/*Create table with option off*/ 
SET ANSI_NULLS OFF; 

CREATE TABLE dbo.YourTable (X INT) 

/*Add some data*/ 
INSERT INTO dbo.YourTable VALUES (1),(2),(3) 

/*Confirm the bit is set to 0*/ 
SELECT uses_ansi_nulls, * 
FROM   sys.tables 
WHERE  object_id = object_id('dbo.YourTable') 

GO 

BEGIN TRY 
    BEGIN TRANSACTION; 
    /*Create new table with identical structure but option on*/
    SET ANSI_NULLS ON; 
    CREATE TABLE dbo.YourTableNew (X INT) 

    /*Metadata only switch*/
    ALTER TABLE dbo.YourTable  SWITCH TO dbo.YourTableNew;

    DROP TABLE dbo.YourTable; 

    EXECUTE sp_rename N'dbo.YourTableNew', N'YourTable','OBJECT'; 

    /*Confirm the bit is set to 1*/ 
    SELECT uses_ansi_nulls, * 
    FROM   sys.tables 
    WHERE  object_id = object_id('dbo.YourTable') 

    /*Data still there!*/ 
    SELECT * 
    FROM dbo.YourTable

    COMMIT TRANSACTION; 
END TRY 

BEGIN CATCH 
    IF XACT_STATE() <> 0 
      ROLLBACK TRANSACTION; 

    PRINT ERROR_MESSAGE(); 
END CATCH; 

चेतावनी:जब आपकी तालिका में एक पहचान कॉलम होता है तो आपको पहचान मान को फिर से शुरू करने की आवश्यकता होती है। स्विच टू पहचान कॉलम के बीज को रीसेट कर देगा और यदि आपके पास पहचान पर एक अद्वितीय या प्राथमिक कुंजी बाधा नहीं है (उदाहरण के लिए क्लस्टर किए गए कॉलमस्टोर इंडेक्स का उपयोग करते समय SQL 2014 में) आप इसे तुरंत नोटिस नहीं करेंगे। आपको फिर से बीज मूल्य को सही ढंग से सेट करने के लिए DBCC CHECKIDENT ('dbo.YourTable', RESEED, [reseed value]) का उपयोग करने की आवश्यकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. .mdf डेटाबेस को अपडेट करने में विफल क्योंकि डेटाबेस केवल पढ़ने के लिए है (Windows अनुप्रयोग)

  2. प्रत्येक पंक्ति में स्तंभ मान के आधार पर पंक्तियों की नकल करना

  3. SQL सर्वर डेटाबेस (T-SQL) को पुनर्स्थापित करें

  4. मैं सी # में एसक्यूएल फ़ंक्शन कैसे कॉल कर सकता हूं?

  5. इनर जॉइनिंग थ्री टेबल