【发布时间】:2019-06-07 09:51:16
【问题描述】:
当我使用 SMO 编写一个将 IncludeIfNotExists 设置为 true 的过程脚本时,它首先创建该过程,然后对其进行更改。有没有办法以动态 SQL 样式创建过程? (就像在 SSMS 中一样)
这是我从 SMO 得到的:
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[proc_a]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[proc_a] AS'
END
GO
ALTER PROCEDURE [dbo].[proc_a]
AS
BEGIN
-- etc..
END
GO
我想要这样的东西:
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[proc_a]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[proc_a]
AS
BEGIN
-- etc..
END
'
END
GO
【问题讨论】:
-
因此,如果 proc 已经存在并且具有与脚本定义不同的定义,您想保留旧定义而不是更改它以匹配脚本定义?我很好奇你的用例。
-
我的用例是我想根据参数创建同一过程的两个不同版本,因此我将用不同的条件替换 IF CONDITION。
标签: sql-server smo