我开发的SQL脚本,使用SSMS,这使得在数据库中的一些变化:
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
,那么数据库有两个表( Table1
和Table2
)和它们之间的外键关系。 在这种情况下,我需要:
- 下降外键关系
FK_Table1_Table2_Table2_Id
; - 删除外键列
Table1.Table2_Id
; - 降
Table2
; - 重新创建
Table2
,使用新表模式; - 插入一些默认值
Table2
。
当我试图执行这个脚本,我得到这些错误:
消息207,级别16,状态1,行262无效列名“数字”。
消息207,级别16,状态1,行262无效列名“姓名”。
看起来像SQL Server使用旧架构Table2
(这的确还没有这些列),但是这怎么可能,如果表刚刚用新模式创建?
我究竟做错了什么?
服务器版本的SQL Server 2012(SP1) - 11.0.3128.0(X64)。
UPDATE。
我添加PRINT
电话(见上面的脚本)。 有没有什么消息窗口,除了错误消息。 那么,是不是正在执行的脚本...这是怎么回事?