【发布时间】:2014-01-07 19:28:29
【问题描述】:
在 SQL Server 中是否有任何内置方法可以覆盖单个事务的现有存储过程?
假设我有一个存储过程
prc_GetValidUsers
@param1 int
...
INSERT INTO *
........prc_GetIdFromString param3
...
...
单个事务是否可以重新定义 prc_GetIdFromString 是别的东西?还是不可能做到这一点?
【问题讨论】:
-
为什么不在你的 sp 中使用一个参数并根据该参数创建另一个表的路径?
-
我正在尝试对 prc_GetValidUsers 进行单元测试,但 prc_GetIdFromString 是一个巨大的函数,它引用了许多表,并且是遗留代码的一部分。由于它是用于测试目的,我不想只为测试添加任何代码,但我也不想在所有这些表中创建数据来测试一个小功能。
-
在测试中,创建dbo.prc_TestGetIdFromString,去掉所有多余的代码。请改为调用此 SP。在数据库中没有像override这样的面向对象的概念。如果您想花哨,请创建一个模式 [test]。然后你可以调用 test.prc_GetIdFromString 而不是 dbo.prc_TestGetIdFromString ...
-
就个人而言,我从来没有在没有测试参数的 proc 中创建任何复杂的东西,如果它设置为测试模式则回滚。当您使 proc 工作或更改它时,没有必要将 gbad 数据放入数据库。如果你把它作为最后一个参数并给它一个默认值 0(非测试模式),那么你甚至不必更改应用程序中任何现有的 proc 调用。
标签: sql-server tsql stored-procedures overriding