我正在尝试通过在存储过程中添加新列来更改表。这就是我所拥有的:
USE [Lab5]
go
create procedure do_ver2 as
alter table VehicleContract
add trailerNr varchar(7) null;
alter table VehicleContract
add constraint FK_VehicleContract_Trailers foreign key (trailerNr) references Trailers(trailerNr);
go
问题是......虽然它没有显示任何错误,但它也不会创建新列。知道为什么吗?这是T-SQL。
答案 0 :(得分:1)
您需要使用Dynamic-SQL在存储过程中执行DDL语句:
CREATE PROCEDURE do_ver2 AS
BEGIN
EXEC('alter table VehicleContract add trailerNr varchar(7) null;');
EXEC('alter table VehicleContract add constraint FK_VehicleContract_Trailers foreign key (trailerNr) references Trailers(trailerNr);');
END
GO
修改强>
在没有BEGIN
和END
的代码中,您的存储过程仅包含第一个语句。你应该总是添加开始/结束块。
USE [Lab5]
go
create procedure do_ver2 as
EXEC('alter table VehicleContract
add trailerNr varchar(7) null;');
EXEC('alter table VehicleContract
add constraint FK_VehicleContract_Trailers
foreign key (trailerNr) references Trailers(trailerNr);');
go
如果检查存储过程的代码,您将看到它只有:
create procedure do_ver2 as
EXEC('alter table VehicleContract add trailerNr varchar(7) null;');