11

データベースにいくつかの変更を加えるSSMSを使用して、SQLスクリプトを開発しています。

USE MyDatabase;

BEGIN TRANSACTION;

-- some statements

PRINT(N'#1');

IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'Table1' AND COLUMN_NAME = 'Table2_Id'))
BEGIN
    ALTER TABLE [dbo].[Table1] DROP CONSTRAINT [FK_Table1_Table2_Table2_Id];
    ALTER TABLE [dbo].[Table1] DROP COLUMN [Table2_Id];
    DROP TABLE [dbo].[Table2];

    PRINT(N'Table2 was dropped.');
END

PRINT(N'#2');

IF (NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'Table2'))
BEGIN
    CREATE TABLE [dbo].[Table2]
    (
        [Id] INT NOT NULL PRIMARY KEY IDENTITY,
        [Number] INT NOT NULL UNIQUE,
        [Name] NVARCHAR(200) NOT NULL,
        [RowVersion] TIMESTAMP NOT NULL
    );
PRINT(N'Table2 was re-created.');
    INSERT INTO [dbo].[Table2]([Number], [Name]) VALUES(-1, N'Default value');
PRINT(N'Default value was inserted in Table2.');
END

-- some statements

COMMIT TRANSACTION;

Table1という名前の列がある場合Table2_Id、データベースには 2 つのテーブル (Table1およびTable2) とそれらの間の外部キー関係があります。その場合、次のことを行う必要があります。

  • 外部キー関係を削除しますFK_Table1_Table2_Table2_Id
  • 外部キー列を削除しますTable1.Table2_Id
  • ドロップTable2;
  • Table2新しいテーブル スキーマを使用して再作成します。
  • にデフォルト値を挿入しますTable2

このスクリプトを実行しようとすると、次のエラーが発生します。

メッセージ 207、レベル 16、状態 1、行 262 列名 'Number' が無効です。
メッセージ 207、レベル 16、状態 1、行 262 列名 '名前' が無効です。

SQL Server は古いスキーマを使用しているように見えますがTable2(実際にはこれらの列はありません)、テーブルが新しいスキーマで作成されたばかりの場合、これはどのように可能でしょうか?

私は何を間違っていますか?

サーバーのバージョンは SQL Server 2012 (SP1) - 11.0.3128.0 (X64) です。

更新します。

呼び出しを追加しましたPRINT(上記のスクリプトを参照)。メッセージ ウィンドウには、エラー メッセージ以外は何も表示されません。それで、スクリプトは実行されていません...何が起こっているのですか??

4

1 に答える 1