sql >> データベース >  >> RDS >> Sqlserver

既存のテーブルの ANSI_NULLS オプションを更新する

    これは データベース管理者に相互投稿 されました ですから、将来の検索者を助けるために、そこからの回答もここに投稿することをお勧めします.

    ALTER TABLE ... SWITCH を使用して、メタデータのみの変更として (つまり、すべてのデータを新しいテーブルに移行することなく) 実行できます。 .

    以下のコード例

    /*オプションをオフにしてテーブルを作成*/ SET ANSI_NULLS OFF; CREATE TABLE dbo.YourTable (X INT) /*データを追加します*/ INSERT INTO dbo.YourTable VALUES (1),(2),(3) /*ビットが 0 に設定されていることを確認します*/ SELECT uses_ansi_nulls, * FROM sys .tables WHERE object_id =object_id('dbo.YourTable') GO BEGIN TRY BEGIN TRANSACTION; /*同じ構造でオプションがオンの新しいテーブルを作成します*/ SET ANSI_NULLS ON; CREATE TABLE dbo.YourTableNew (X INT) /*メタデータのみの切り替え*/ ALTER TABLE dbo.YourTable SWITCH TO dbo.YourTableNew; DROP TABLE dbo.YourTable; EXECUTE sp_rename N'dbo.YourTableNew', N'YourTable','OBJECT'; /*ビットが 1 に設定されていることを確認します*/ SELECT uses_ansi_nulls, * FROM sys.tables WHERE object_id =object_id('dbo.YourTable') /*データがまだあります!*/ SELECT * FROM dbo.YourTable COMMIT TRANSACTION; END TRY BEGIN CATCH IF XACT_STATE() <> 0 ROLLBACK TRANSACTION; PRINT ERROR_MESSAGE();エンドキャッチ;   

    警告:テーブルに IDENTITY 列が含まれている場合は、IDENTITY 値を再シードする必要があります。SWITCH TO は ID 列のシードをリセットし、ID に UNIQUE または PRIMARY KEY 制約がない場合 (例:CLUSTERED COLUMNSTORE インデックスを使用する場合) DBCC CHECKIDENT ('dbo.YourTable', RESEED, [reseed value]) を使用して、シード値を正しく再設定する必要があります。



    1. Postgresはネストされたトランザクションまたは自律的なトランザクションをサポートしていますか?

    2. mysql SELECTステートメントにテキストを挿入して出力を文で表示する方法は?

    3. MSSQLでGROUP_CONCAT関数を使用する方法

    4. AccessはODBCデータソースとどのように通信しますか?パート5