如何判断 ALTER PROCEDURE 是不是有效?
Posted
技术标签:
【中文标题】如何判断 ALTER PROCEDURE 是不是有效?【英文标题】:How to tell if ALTER PROCEDURE worked?如何判断 ALTER PROCEDURE 是否有效? 【发布时间】:2019-10-29 20:07:00 【问题描述】:我对 SQL 和 SQL Server 还是很陌生。我正在尝试从通过 C# 代码调用的.sql
文件运行ALTER PROCEDURE
查询。在继续确保我的查询完成它应该做的之前,我想验证我的 ALTER PROCEDURE
查询实际上改变了过程,但我不知道如何验证。
例如,在 SQL Server 中,我可以看到我正在尝试编辑的存储过程位于:
- database-name
- Programmability/
- Stored Procedures/
- dbo.MyStoredProcedure
如果我的ALTER TABLE
查询正常工作,我可以在此处查看我的程序代码,还是可以在其他地方查看?还是我想错了?
【问题讨论】:
如果它不起作用,这意味着它引发了一个异常,您可以在 c# 代码的 catch 块中捕获该异常。这当然是假设您正在针对您的数据库执行代码块。 显示您的应用代码。很大程度上取决于您如何执行该 SQL 文件。 请记住,更改 SP 时有两个不同的阶段,一个是实际的 alter 命令,它将解析新的 SP 代码,另一个阶段是 编译 这将在 SP 被更改后第一次执行时完成。是的,如果修改成功,如果您在您提到的路线上通过 SSMS 打开 SP 代码,您应该会看到更新的代码。 【参考方案1】:通常,我们依靠错误和异常消息来告诉我们什么时候这样的事情没有奏效。但是,我认为过程 Alter-ed 可能不是预期的过程(当然,这意味着名称/路径/调用构造中的错误)。
在这种情况下,您可以从sys.sql_modules
表中获取任何 SQL 模块(过程、视图、触发器等,任何基于脚本的内容)的当前文本:
SELECT definition FROM sys.sql_modules
WHERE object_id=OBJECT_ID('dbo.UserSamples_Insert')
您应该注意,通常当这种情况发生而没有错误消息时,是因为:
-
您在错误的数据库中执行(例如,当您打算在 DEV 中使用 PROD 时,反之亦然),或者
您没有使用正确的架构(因为您可以创建和使用
'dbo'
以外的架构)。
等等,你说ALTER PROCEDURE
两次,然后你说第三次ALTER TABLE
。它是哪一个?我问是因为与几乎所有其他 SQL 对象不同,表不是基于脚本的,并且在任何 Sql 脚本存储库(如 sys.sql_modules)中都找不到它们的定义。我实际上使用了 SMO(来自客户端)或 @SeanLange 多年前为此编写的工具(来自服务器本身)。
【讨论】:
以上是关于如何判断 ALTER PROCEDURE 是不是有效?的主要内容,如果未能解决你的问题,请参考以下文章
SQLITE 在alter表添加列时怎么判断表中是不是已经存在列