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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |