1
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到表中。我试图将数据保存到临时表中,删除原始表然后重新创建它。SQL脚本无效列名
当我运行该脚本,我得到一个错误:
Invalid column name 'ID'
我猜它是做一个预编译和让我知道ID并不在当前的表中。
我需要做些什么来修改这个脚本,使其运行?
当我双击Invalid column name 'ID'
消息时,它给我带来的这部分脚本:
INSERT INTO
dbo.tblRCatOmit(ID,
RCatID,
CountryID)
为什么你将身份插入,然后不提供一个值?我会为你的专栏推荐一个比ID更好的名字。也许像RCatOmitID。我也建议在你的桌子上取消tbl优先。除了增加额外的按键操作,它们什么也不做,并且让你很难看到你所引用的表格。 –
@SeanLange - 同意!处理遗留代码。 – webdad3