Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL:WHERE子句-如何根据输入变量进行调整_Sql_Sql Server_Tsql - Fatal编程技术网

T-SQL:WHERE子句-如何根据输入变量进行调整

T-SQL:WHERE子句-如何根据输入变量进行调整,sql,sql-server,tsql,Sql,Sql Server,Tsql,使用SQLServer2008。我的存储过程中有一个名为“@State”的输入参数。参数基本上可以是“--All--”,也可以包含要筛选的状态 因此,如果它是'--All--',我不想将@State合并到where子句中。否则,我希望它根据提供的@State进行过滤。所以基本上它可能会导致 SELECT * FROM MyTable WHERE Type='AAA' AND Status=@Status 或者,如果他们通过“所有--” 如何在存储过程中执行此操作?我以为您输入了一个错误。它应该

使用SQLServer2008。我的存储过程中有一个名为“@State”的输入参数。参数基本上可以是“--All--”,也可以包含要筛选的状态

因此,如果它是'--All--',我不想将@State合并到where子句中。否则,我希望它根据提供的@State进行过滤。所以基本上它可能会导致

SELECT * FROM MyTable
WHERE Type='AAA' AND Status=@Status
或者,如果他们通过“所有--”


如何在存储过程中执行此操作?

我以为您输入了一个错误。它应该是@State,而不是@Status。这个简单的查询可能不是您想要的,因为您希望在需求中包含两个sql语句

SELECT
    *
FROM
    MyTable
WHERE
    Type='AAA'
    AND Status = CASE @Status WHEN '--All--' THEN Status ELSE @Status END
SELECT * FROM MyTable
WHERE Type='AAA' AND (@State='--All--' or State=@State)

我以为你打错了。它应该是@State,而不是@Status。这个简单的查询可能不是您想要的,因为您希望在需求中包含两个sql语句

SELECT * FROM MyTable
WHERE Type='AAA' AND (@State='--All--' or State=@State)
或者

你可以让它变得更简单:

 SELECT * FROM MyTable
 WHERE Type='AAA' AND @State in ('--All--', State)
无需在存储过程中执行此操作,除非绝对必要(或者如果业务/编码实践要求您这样做)。

你可以让它变得更简单:

 SELECT * FROM MyTable
 WHERE Type='AAA' AND @State in ('--All--', State)
无需在存储过程中执行此操作,除非绝对必要(或者如果业务/编码实践要求您这样做)