[英]SQL Script Invalid Column name
BEGIN TRANSACTION
BEGIN TRY
DECLARE @tblRCatOmitTemp TABLE (ID INT IDENTITY(1,1),
RCatId int NOT NULL,
CountryId int NOT NULL)
INSERT INTO @tblRCatOmitTemp
SELECT RCatId, CountryId
FROM dbo.tblRCatOmit TABLOCKX
DROP TABLE dbo.tblRCatOmit
CREATE TABLE dbo.tblRCatOmit(
ID INT IDENTITY(1,1),
RCatId INT NOT NULL,
CountryId INT NOT NULL) ON [PRIMARY]
ALTER TABLE dbo.tblRCatOmit
ADD CONSTRAINT PK_RCatOmit PRIMARY KEY CLUSTERED (ID);
ALTER TABLE dbo.tblRCatOmit
ADD CONSTRAINT FK_RCatOmit_rcatId FOREIGN KEY (RCatId)
REFERENCES dbo.tblRCat (RCatID);
ALTER TABLE dbo.tblRCatOmit
ADD CONSTRAINT FK_RCatOmit_countryId FOREIGN KEY (CountryId)
REFERENCES dbo.tblCountry (CountryID)
SET IDENTITY_INSERT dbo.tblRCatOmit ON
INSERT INTO
dbo.tblRCatOmit(
ID,
RCatID,
CountryID)
SELECT
ID,
RCatID,
CountryID
FROM
@tblRCatOmitTemp
SET IDENTITY_INSERT dbo.tblRCatOmit OFF
COMMIT TRANSACTION tblRCatOmit;
END TRY
BEGIN CATCH
PRINT N'Something Happend!'
ROLLBACK;
END CATCH
我必须向表中添加一个新的IDENTITY字段以及PK和FK。 我试图将数据保存到临时表中,删除原始表,然后重新创建它。
当我运行此脚本时,出现错误:
无效的列名“ ID”
我猜它正在进行预编译,并让我知道ID在当前表中不存在。
我需要做什么来修改此脚本才能运行?
当我双击Invalid column name 'ID'
消息时,它将带我进入脚本的这一部分:
INSERT INTO
dbo.tblRCatOmit(ID,
RCatID,
CountryID)
BEGIN TRANSACTION
BEGIN TRY
IF OBJECT_ID('tempdb..#tblRCatOmitTemp') IS NOT NULL
BEGIN
DROP TABLE #tblRCatOmitTemp
END
CREATE TABLE #tblRCatOmitTemp (
RCatId int NOT NULL,
CountryId int NOT NULL)
INSERT INTO #tblRCatOmitTemp
SELECT RCatId, CountryId
FROM dbo.tblRCatOmit TABLOCKX
DROP TABLE dbo.tblRCatOmit
CREATE TABLE dbo.tblRCatOmit(
ID INT IDENTITY(1,1),
RCatId INT NOT NULL,
CountryId INT NOT NULL) ON [PRIMARY]
ALTER TABLE dbo.tblRCatOmit
ADD CONSTRAINT PK_RCatOmit PRIMARY KEY CLUSTERED (ID);
ALTER TABLE dbo.tblRCatOmit
ADD CONSTRAINT FK_RCatOmit_rcatId FOREIGN KEY (RCatId)
REFERENCES dbo.tblRCat (RCatID);
ALTER TABLE dbo.tblRCatOmit
ADD CONSTRAINT FK_RCatOmit_countryId FOREIGN KEY (CountryId)
REFERENCES dbo.tblCountry (CountryID)
INSERT INTO
dbo.tblRCatOmit(
RCatID,
CountryID)
SELECT
RCatID,
CountryID
FROM
#tblRCatOmitTemp
COMMIT TRANSACTION tblRCatOmit;
END TRY
BEGIN CATCH
PRINT N'Something Happend!'
ROLLBACK;
END CATCH
如果您不想使用临时表并添加该插入,也可以使用sp_rename重命名现有表。
而且,如果您不在乎列的顺序位置,则只需添加列,然后再添加键。
ALTER TABLE dbo.tblRCatOmit
ADD ID INT IDENTITY(1,1)
ALTER TABLE dbo.tblRCatOmit
ADD CONSTRAINT PK_RCatOmit PRIMARY KEY CLUSTERED (ID);
ALTER TABLE dbo.tblRCatOmit
ADD CONSTRAINT FK_RCatOmit_rcatId FOREIGN KEY (RCatId)
REFERENCES dbo.tblRCat (RCatID);
ALTER TABLE dbo.tblRCatOmit
ADD CONSTRAINT FK_RCatOmit_countryId FOREIGN KEY (CountryId)
REFERENCES dbo.tblCountry (CountryID)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.