gpt4 book ai didi

sql-server - 复制场景中 SQL Server 存储过程的 CREATE/ALTER 语法?

转载 作者:行者123 更新时间:2023-12-02 07:48:42 25 4
gpt4 key购买 nike

我将所有 T-SQL DDL 语句存储在版本控制下的 Visual Studio 数据库项目中。这些脚本旨在始终无错误地运行,因此它们包含如下所示的删除/创建语法:

use MyDatabase
go
if objectproperty(object_id('dbo.MyProcName'), 'IsProcedure') = 1 begin
drop procedure dbo.MyProcName as
end
go
-----------------------------------------------------------------------
-- $Id: $
-- Notes: blah blah
-----------------------------------------------------------------------
create procedure dbo.MyProcName as
--...
go

问题是,我们已经转移到复制方案,所以我不能再使用我的删除/创建语法,因为您不能删除标记为复制的对象。现在我需要创建 proc 如果它不存在,或者如果它存在则改变它。而且我无法反转我的 IF 逻辑,因为我无法在 IF 语句中创建 proc - 我只能放弃它。有什么想法吗?


编辑:感谢 Adam 的回答,这就是我最终使用的内容。不知道为什么我不考虑执行 SQL 字符串...必须多喝咖啡。

use MyDatabase
go
if objectproperty(object_id('dbo.MyProcName'), 'IsProcedure') is null begin
exec('create proc dbo.MyProcName as')
end
go
-----------------------------------------------------------------------
-- $Id: $
-- Notes: blah blah
-----------------------------------------------------------------------
alter procedure dbo.MyProcName as
--...
go

最佳答案

您可以做的是让脚本的第一部分为该过程创建一个 stub (如果它不存在),然后将脚本的其余部分转换为 ALTER 脚本而不是 创建

例如:

if objectproperty(object_id('dbo.MyProcName'), 'IsProcedure') <> 1 begin
exec sp_ExecuteSql N'create Procedure dbo.MyProcName as select 1'
end
go
-----------------------------------------------------------------------
-- $Id: $
-- Notes: blah blah
-----------------------------------------------------------------------
alter procedure dbo.MyProcName as
--...
go

请注意,您必须在此处使用 sp_ExecuteSql(或类似的东西),因为 create procedure 必须是批处理中的第一个语句。

关于sql-server - 复制场景中 SQL Server 存储过程的 CREATE/ALTER 语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4993766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com