sql >> Databáze >  >> RDS >> Sqlserver

Chyba neplatného názvu sloupce při volání insert po vytvoření tabulky

SQL Server se pokusí zkompilovat celou dávku. Pokud tabulka již existuje, zkompiluje se podle již existující definice. Příkaz odkazující na nové sloupce se nezkompiluje, a tak se dávka nikdy nespustí.

Musíte seskupit příkazy pomocí nové definice do nové dávky. Pokud to spouštíte v SSMS, stačí vložit 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

Jinak byste mohli spustit problematický řádek v podřízené dávce

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



  1. Problém se získáním správného počtu při připojení

  2. SQL dotaz pro načtení dat finančního roku seskupených podle roku

  3. MySQL Rollback Query

  4. Chybný výsledek aktualizace dotazu