在我的SQL Server 2008
我有一个stored procedure
带有大量参数的。
它们的第一部分在每次调用中都使用,第二部分的参数很少使用。而且我无法将逻辑移动到两个不同的存储过程。
有没有办法将所有这些参数封装到 a class
orstruct
并将其作为存储过程参数传递?
我可以使用SQL CLR
. 还有其他方法吗?
在我的SQL Server 2008
我有一个stored procedure
带有大量参数的。
它们的第一部分在每次调用中都使用,第二部分的参数很少使用。而且我无法将逻辑移动到两个不同的存储过程。
有没有办法将所有这些参数封装到 a class
orstruct
并将其作为存储过程参数传递?
我可以使用SQL CLR
. 还有其他方法吗?
您是否尝试过表值参数?
实际上,我不会将 CLR 函数用于任何可以在 t-SQL 中有效且轻松地完成的事情。例如,上次我使用 CLR 函数是为了根据一些复杂的正则表达式更新列,我发现在 t-SQL 中很难做到这一点。
听起来您关心的是需要为每个参数指定值。将默认值分配给不经常使用的参数是否对您有用(因此您不需要在每次调用 proc 时都传递每个参数)?
CLR 类型可能是一种选择(就像 XML 一样),但我不确定沿着这条路线走是个好主意。
如果参数量导致您的应用程序出现问题,您可以尝试以下两种方法之一:
1) 传入包含所有参数数据的 XML 数据类型的单个参数。然后你可以解析出你需要的东西。请参阅xml (Transact-SQL)。
2)创建表参数,见Table-Valued Parameters (Database Engine),其中表为:
ParameterName sysname
DataValue sql_variant
使用这两种方法中的任何一种,您很可能需要将它们扩展为局部变量才能再次使用它们。