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

テーブルが作成された後に挿入を呼び出すときに無効な列名エラー

    SQL Serverは、バッチ全体をコンパイルしようとします。テーブルがすでに存在する場合は、既存の定義に従ってコンパイルされます。新しい列を参照するステートメントはコンパイルされないため、バッチは実行されません。

    新しい定義を使用してステートメントを新しいバッチにグループ化する必要があります。これをSSMSで実行している場合は、GOを挿入するだけです。

    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
    
    GO
    
    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
    
    COMMIT
    

    それ以外の場合は、問題のある行を子バッチで実行できます

        EXEC(N'INSERT INTO [dbo].[Table2]([Number], [Name]) VALUES(-1, N''Default value'');')
    



    1. OCIEnvNlsCreate()が失敗しました。 phpでOracleデータベースに接続しようとすると

    2. flywayを使用して1つのDBから別のDBにデータを移行するにはどうすればよいですか?

    3. Excelでの日付(YY:MM:DD:Time)の書式設定

    4. Node.jsアプリ全体に同じMySQL接続を使用するにはどうすればよいですか?