表设计用于存储动态SQL和存储过程

时间:2015-01-01 16:10:44

标签: sql-server sql-server-2008

我想在表中存储少量编译的存储过程,并希望动态触发它们。这些过程将在另一个过程名称GetDetails中触发。我将表格设计如下:

表:SQLtab

Id    SQLText            ParamId
1     GetProdDetails     1
2     GetSuppDetails     2

表:SQLParams

ParamId    SQLParam
1          prodId
2          suppId

编译过程的参数将由外部过程(GetDetails)确定,该过程将从SQLtab表中读取过程名称并触发它们。所以,我不能将过程参数值存储在表中。过程GetDetails运行查询并确定prodIdsuppId的参数值。我打算创建一个临时表来存储参数值,如下所示:

Id    SQLText            ParamVal
1     GetProdDetails     10
2     GetSuppDetails     12

在外部过程中创建临时表后,我可以使用参数值动态触发过程。不知何故,我觉得这不是最好的桌子/程序设计。有人可以提出更好的设计吗?

1 个答案:

答案 0 :(得分:1)

为什么要在SQL Server编目视图为您完成时创建这些表并维护它们。

我只需使用以下查询来获取过程名称及其参数

SELECT po.name AS [Proc Name]
      ,pa.name AS [Param Name] 
FROM sys.procedures po
INNER JOIN sys.parameters pa ON po.object_id = pa.object_id 
WHERE po.name LIKE '%ProcName%'
-- AND po.is_ms_shipped = 0    --<--   add more filters as required