为什么SQL Server T-SQL不让您在ALTER PROCEDURE
语句中为某些对象类型运行IF
语句?可以通过用Execute()
包装东西来解决此问题,但是我想了解必要的原因。
我正在运行SQL Server 2019 CTP3.0。
为此:
create proc delme
as
begin
select 1 from sysobjects
end
go
这不起作用:
if (1=1) begin
alter procedure dbo.delme
as
begin
select top 1 * from sysobjects
end
end
但这确实可行:
if (1=1)
begin
execute('alter procedure dbo.delme
as
begin
select top 1 * from sysobjects
end')
end
在测试其他对象类型时,我没有发现一致性。例如,对于表,它可以工作:
create table delme2(a int)
go
if (1=1) begin
alter table delme2 add b int
end
但是对于功能而言,它不起作用(例如过程):
create function delme3() returns int
begin
return 1
end
go
if (1=1) begin
alter function delme3() returns int
begin
return 1
end
end