ALTER TABLE...ADD 在 SSMS 中不起作用
ALTER TABLE...ADD not working in SSMS
我正在尝试通过在存储过程中添加新列来更改 table。这是我拥有的:
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.
您需要使用 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
的代码中,您的存储过程仅包含第一条语句。您应该始终添加 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;');
我正在尝试通过在存储过程中添加新列来更改 table。这是我拥有的:
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.
您需要使用 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
的代码中,您的存储过程仅包含第一条语句。您应该始终添加 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;');