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

前端之家收集整理的这篇文章主要介绍了sql-server – T-SQL:如何在存储过程中创建一个“私有”函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好的,我写了一个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

猜你在找的MsSQL相关文章