首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Create Procedure Abort逻辑

SQL Create Procedure Abort逻辑
EN

Stack Overflow用户
提问于 2012-03-27 04:43:14
回答 3查看 73关注 0票数 0

大家下午好-

我已经有了基本的想法,但我希望消息出来时没有试图编译SP时出现的所有模式问题。

这基本上就是我所拥有的:

代码语言:javascript
复制
IF EXISTS ... DROP PROCEDURE 

SELECT TOP 1 Version INTO #CurrentVersion FROM Application_Version ORDER BY UpdateDate DESC

IF NOT EXISTS (SELECT 1 FROM #CurrentVersion WHERE Version = 10)
RAISERROR ('This is for U10 only. Check the application version.', 20, 1) WITH LOG

CREATE PROCEDURE ....

RAISERROR导致SP不会出现在数据库中,我确实收到了一个错误,但由于过去的架构更改,我也得到了架构错误。由于SP需要是批处理中的第一条语句,所以我不能使用IF / ELSE和NOEXEC产生与RAISERROR相同的结果(没有错误)。

如果SP命中RAISERROR,那么可以做些什么来获得与上面相同的结果,而不需要检查架构,这样我就不会收到一堆额外的消息报告?

EN

回答 3

Stack Overflow用户

发布于 2012-03-27 06:15:39

您需要的是停止执行脚本的错误条件,这在使用简单:on error exitSQLCMD mode of the query editor中是可能的

代码语言:javascript
复制
:on error exit

SELECT TOP 1 Version INTO #CurrentVersion FROM Application_Version ORDER BY UpdateDate DESC

IF NOT EXISTS (SELECT 1 FROM #CurrentVersion WHERE Version = 10)
   RAISERROR ('This is for U10 only. Check the application version.', 16, 1);
go

IF EXISTS ... DROP PROCEDURE 
go

CREATE PROCEDURE ....
...
go

有了这一点,就不需要提高严重性20。严重性16就足够了,它将处理您抱怨的ERRORLOG问题。

票数 1
EN

Stack Overflow用户

发布于 2012-03-27 06:10:39

RETURN语句将退出SP。在进行错误检查时,在IF语句后面加上BEGINEND,在RAISERROR后面加上RETURN语句。

票数 0
EN

Stack Overflow用户

发布于 2012-03-27 20:02:14

这里有几个选项。我的方法如下,因为我觉得它提供了最好的流程:

代码语言:javascript
复制
IF EXISTS ... DROP PROCEDURE 

IF EXISTS (SELECT * FROM Application_Version WHERE Version = 10)
BEGIN
    DECLARE @sql NVARCHAR(MAX)
    SET @sql = 'CREATE PROCEDURE blablabla AS
        BEGIN
            -- Your Procedure HERE
        END'
    EXEC sp_executesql @sql
END ELSE
    RAISERROR ('This is for U10 only. Check the application version.', 20, 1) WITH LOG
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9879525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档