ALTER TABLE ... ADD在SSMS中不起作用

时间:2015-10-28 20:04:13

标签: sql-server tsql ssms alter-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。

1 个答案:

答案 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

修改

在没有BEGINEND的代码中,您的存储过程仅包含第一个语句。你应该总是添加开始/结束块。

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;');