Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有任何理由不在存储过程中使用可选参数?_C#_Sql Server_Stored Procedures - Fatal编程技术网

C# 是否有任何理由不在存储过程中使用可选参数?

C# 是否有任何理由不在存储过程中使用可选参数?,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,作为我新工作的一部分,我正在为一个用C编写的现有项目添加新功能。我的部分工作涉及更新SQL Server上的存储过程。这个过程过去非常痛苦,因为向存储过程添加参数通常会导致站点的另一部分中断,因为更改存储过程的参数列表意味着必须在站点范围内更新对存储过程的调用 我找到的解决方案是使用选项参数,例如: CREATE PROCEDURE doSomething ( @Parameter1 NVARCHAR(50), @NewParameter INT = 1 ) 因此,新参数将设

作为我新工作的一部分,我正在为一个用C编写的现有项目添加新功能。我的部分工作涉及更新SQL Server上的存储过程。这个过程过去非常痛苦,因为向存储过程添加参数通常会导致站点的另一部分中断,因为更改存储过程的参数列表意味着必须在站点范围内更新对存储过程的调用

我找到的解决方案是使用选项参数,例如:

CREATE PROCEDURE doSomething  
 (  @Parameter1 NVARCHAR(50),
    @NewParameter INT = 1
 )
因此,新参数将设置一个默认值,这意味着不包含@NewParameter的调用不会引发异常。对我来说,这似乎是一个显而易见的解决方案,但我注意到与此项目关联的存储过程中没有任何可选参数。我还注意到,在过去,当我发现一个其他人都没有使用的新的聪明编程技巧时,通常是有原因的


那么,在存储过程中不使用可选参数有什么技术原因吗?它是否在某种程度上影响了性能?当可选参数可能导致未定义的行为时,是否存在兼容性问题或实例?在.net存储过程中使用可选参数时,我没有遇到任何问题。然而,在我以前在旧版本的ColdFusion中使用的代码库中,有一个名为dbprocparam name或类似的字段,无论输入什么名称,参数都将按顺序传递

e、 g

如果我将SP称为,但想象一下CF语法 执行程序1 @2 = 1 @3 = 1 @1=0

当proc应该是exec proc_1 0,1,1时,它实际上会以exec proc_1 1,1,0的形式命中探查器

将可选参数添加到不在参数列表底部的存储过程时,这就成了一个问题。这是在多用途SP上修改参数列表的潜在问题之一


需要注意的是,我只在使用旧的coldfusion时遇到过这种情况,但它也可能存在于其他地方。

有一个默认值的参数只是一种修复方法,将来可能会咬你一口。也许这就是他们不使用它的原因。好吧,我认为基于这个问题的不活跃性,没有太多需要担心的。谢谢你的回答,我一定会留意的!
exec proc_1
 @1 bit ,
 @2 bit ,
 @3 bit