sql-server - T-SQL : How Do I Create A "Private" Function Inside A Stored Procedure

标签 sql-server tsql stored-procedures user-defined-functions

好的,我正在编写 SQL Server 2008 存储过程(维护脚本)。

在这样做的过程中,作为一个好 child ,我做了很多错误处理、检查行数、打印输出消息等

但在这样做的过程中,我发现自己一遍又一遍地写这样的东西:

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

或者像这样调试消息:
PRINT 'User ' + CAST(@UserId AS NVARCHAR(5)) + ' modified successfully'

有没有一种方法可以在存储过程中创建一种“子例程”(如私有(private)方法),它可以接受某些东西作为参数(尽管不必)并执行一些逻辑?

我希望能够做这样的事情:
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

关于sql-server - T-SQL : How Do I Create A "Private" Function Inside A Stored Procedure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2994926/

相关文章:

java - 有没有一个规范的例子说明如何使用 Antlr 4 来解析 SQL 语句?

sql-server - 这种 .NET/SQL Server 事务场景是否可行?

c# - 将巨大的 xml 参数传递给存储过程的最佳方法

sql - 如何将查询的 CTE 输出保存到临时表或表变量中

sql - insert into.. select 语句是事务性的吗?

mysql - 更改特定存储过程的 DEFINER 吗?

sql - 将西里尔字符传递到存储过程中不起作用 Sql Server

asp.net - 如何在 EntityDataSource 中使用 CASE 语句进行排序?

mysql - sql存储过程order-by问题

sql - 我可以在没有源列名成为 SQL Server 2016 键的情况下使用 FOR JSON 吗?