gpt4 book ai didi

sql - 使用带有 'GO' 语句的 sp_EXECUTESQL 失败管理数据库中的 SQL 执行

转载 作者:行者123 更新时间:2023-12-04 06:29:57 24 4
gpt4 key购买 nike

我有一个应用程序,它将管理 DDL 更改和 TSql 可执行语句的发布到 SQL 服务器数据库。

基本工作流程:开发人员提交.sql文件,收集文件,审核SQL并在发布周期中分配一个步骤,使用存储过程在数据库中执行发布,它将在单个SQL事务中循环执行SQL的步骤,使用sp_EXECUTESQL。如果发生任何错误,事务不会提交 DDL 更改。此过程将 SQL 从单个数据库管理到同一实例上的多个数据库。

我遇到的问题是,当提交 SQL 脚本时,它们包含 sp_EXECUTESQL 不支持的“GO”语句并抛出“'GO'附近的语法不正确”错误。我可以通过解析“GO”关键字来拆分和分解大多数事务,但这不适用于其他数据库中的项目。一旦我对另一个数据库进行了某种 ALTER,我就需要“GO”。例如以下不能一起执行,不能拆分为两个语句执行:

USE [MyDatabaseOtherThanOneIAmExecutingFrom]
GO
Alter PROCEDURE [dbo].[DoSomething]
...

从语法上讲,以下语句将不起作用,因此要求开发人员将其 sql 更改为带有 db 名称的前缀只会涵盖非 DDL SQL:
 Alter PROCEDURE [MyDatabaseOtherThanOneIAmExecutingFrom].[dbo].[DoSomething]

最初的要求是留在数据库中以执行这些部署操作,因此编写一个简短的一次性应用程序来使用 SqlCommand 从 .Net 执行批处理不是一种选择。

是否有其他选项可以在数据库内处理此问题,或者我是否需要扩展到外部并创建应用程序来管理 SQL 步骤的执行?

最佳答案

您可以嵌套 sp_executesql 调用。这有点难看,但它有效,并允许您对其他数据库执行 DDL:

sp_executesql N'use OtherDB exec sp_executesql N''create procedure DoStuff @Parm1 varchar(10) as select * from sysobjects'''

关于sql - 使用带有 'GO' 语句的 sp_EXECUTESQL 失败管理数据库中的 SQL 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5538327/

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