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