2009-11-16 58 views
0

我有一个200线长的存储过程,它得到的参数“prmtr”扩展存储过程(添加一个部分吧),通过使用SQL Server中的参数

我想要做的就是添加根据我的参数,我的存储过程是一个“sql部分”。

例如:

SELECT A.* FROM 
(
SELECT * FROM table1 
) A 

IF (my parameter) = a 

LEFT JOIN 
(
SELECT * FROM table2 
) B 
ON A.ID= B.ID 

回答

2

你可以像下面这样做

SELECT A.* 
FROM (
      SELECT * 
      FROM table1 
     ) A LEFT JOIN 
     (
      SELECT * 
      FROM table2 
     ) B ON @prmt = 'A' 
      AND A.ID= B.ID 
+0

,对于我的问题的作品,但有关如何安装一个SQL部分怎么样“WHERE A.ID IN(SELECT ID FROM newtable的)”,这取决于在我的参数? – stckvrflw 2009-11-16 09:39:27

+0

您可以切换一个WHERE语句,比如'WHERE @prmt <>'A'或者A.ID IN(SELECT ID FROM newTable)' – Andomar 2009-11-16 09:40:37

+0

谢谢你们很酷的答案。 :) – stckvrflw 2009-11-16 09:50:40

1

你不能改变一个这样的查询 - 所以你有两个选择:

  • 有两个单独的查询在存储过程(每个分支) - 确定两,但不能很好地扩展到更复杂的组合
  • 使用动态SQL;即在varchar(4000)中建立查询并使用sp_ExecuteSQL来调用它;显然还算可以改变一个包括额外'LEFT JOIN ...'

所有这一切说,虽然,我一般喜欢单一的存储过程总是返回相同的架构 - 这与大多数ORM工具完全弄乱如果您更改基于参数的列。东西看...