如何重构T-SQL存储过程将其参数封装到类中

时间:2010-03-22 19:00:46

标签: sql-server tsql sql-server-2008 stored-procedures sqlclr

SQL Server 2008我的stored procedure上有大量参数。

它们的第一部分用于每次调用,第二部分的参数很少使用。我无法将逻辑移动到两个不同的存储过程。

有没有办法将所有这些参数封装到classstruct并将其作为存储过程参数传递?

我可以使用SQL CLR吗?还有其他方法吗?

3 个答案:

答案 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

使用这些方法中的任何一种,您都可能需要将它们扩展为局部变量以再次使用它们。