ALTER PROCEDURE在IF语句中不起作用

时间:2019-11-29 14:41:16

标签: sql-server tsql

为什么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

0 个答案:

没有答案