Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Lỗi tên cột không hợp lệ khi gọi chèn sau khi tạo bảng

SQL Server cố gắng biên dịch toàn bộ lô. Nếu bảng đã tồn tại thì nó sẽ biên dịch theo định nghĩa đã có từ trước. Câu lệnh tham chiếu đến các cột mới không biên dịch và do đó, lô không bao giờ thực thi.

Bạn cần nhóm các câu lệnh sử dụng định nghĩa mới thành một lô mới. Nếu bạn đang chạy phần mềm này trong SSMS, chỉ cần chèn một 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

Nếu không, bạn có thể chạy dòng vi phạm trong một lô con

    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. Nhập tệp CSV Lỗi:Giá trị cột chứa dấu phân cách cột

  2. Cách xem nhật ký giao dịch trong SQL Server 2008

  3. 7645 Vị ngữ toàn văn bản rỗng hoặc trống

  4. Trước tiên, ánh xạ các khóa tổng hợp bằng mã EF

  5. Áp dụng hàm tổng hợp MIN cho trường BIT