加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – T-SQL:如何在存储过程中创建一个“私有”函数

发布时间:2020-12-12 08:50:29 所属栏目:MsSql教程 来源:网络整理
导读:好的,我写了一个SQL Server 2008存储过程(维护脚本). 在这样做的时候,做个好孩子我做了大量的错误处理,检查行数,打印输出信息等 但是,在这样做的时候,ive发现自己一遍又一遍地写了这样的事情: SELECT @RowsAffected = @@ROWCOUNTIF @RowsAffected 0BEGIN PRI
好的,我写了一个SQL Server 2008存储过程(维护脚本).

在这样做的时候,做个好孩子我做了大量的错误处理,检查行数,打印输出信息等

但是,在这样做的时候,ive发现自己一遍又一遍地写了这样的事情:

SELECT @RowsAffected = @@ROWCOUNT
IF @RowsAffected > 0
BEGIN
   PRINT CAST(@RowsAffected,NVARCHAR(2)) + 'rows updated.'
END

或者调试这样的消息:

PRINT 'User ' + CAST(@UserId AS NVARCHAR(5)) + ' modified successfully'

有没有办法,我可以在存储过程中创建一个“子例程”(像私有方法),它可以接受一些参数(不需要),并且做一些逻辑?

我想要做这样的事情:

CheckRowCounts

或这个:

PrintUserUpatedMessage(@UserId)

然后,它将执行上述逻辑(检查行数,打印消息等)

是的,显然我可以创建一个UDF,但是我需要创建/删除它等等,因为这个逻辑仅仅是执行这个存储过程的寿命.

生病和厌倦一遍又一遍地编写相同的代码,并改变所有不同的区域,当我收到错误=时使用它)

谁能帮忙?

编辑

好的,所以我最终创建了一个标量的UDF函数(似乎只有这样).

不过,我已经向Fredrik提供了正确的答案,尽管我不打算实施这一点,但这是一个正确的答案和创造性的答案.

感谢所有的建议/帮助.

解决方法

我首先尝试从现有的SP中创建另一个暂时的SP,但是在尝试了一下之后,我想你可以用这样的东西(如果你不介意动态SQL):
CREATE PROCEDURE sp_myTest_v1_0(@firstName NVARCHAR(255)) AS
BEGIN
    -- declare private method
    DECLARE @privateMethod NVARCHAR(255),@privateMethodSig NVARCHAR(255)
    SELECT @privateMethod = 
        'DECLARE @x INT' + CHAR(10) +
        'WHILE ISNULL(@x,0) < 10 BEGIN' + CHAR(10) +
            'PRINT @param1 + CAST(@x AS VARCHAR)' + CHAR(10) +
            'SET @x = ISNULL(@x,0)+1' + CHAR(10) +
        'END',@privateMethodSig = '@param1 NVARCHAR(255)'

    -- call privateMethod
    EXEC sp_executesql @privateMethod,@privateMethodSig,@param1 = @firstName
END
GO

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读