Sqlserver
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sp_MSforeachdb:включва само резултати от бази данни с резултати

  2. Синтаксис на for-loop в SQL Server

  3. Как да разберете към коя таблица принадлежи заключване на страница

  4. Как да промените схемата на всички таблици, изгледи и съхранени процедури в MSSQL

  5. Какво е ISO_year в sql-сървър