SQL Server中带条件Where子句的存储过程

时间:2017-08-01 21:03:14

标签: sql-server stored-procedures

我正在创建一个SQL Server存储过程。这是我正在构建的简单package main import "fmt" type Product struct{ Price float64 } func main() { test1 := Product{Price: 1.00} test2 := []Product{test1} fmt.Println(test2) } 查询。其中一个参数是查找标志参数。如果该参数留空,则SELECT应默认为不具有SELECT子句。

WHERE

这只是一个简单的查询和一个简单的想法,不确定是否可以在没有嵌套和重写整个CREATE PROCEDURE sprocA @flagInd int AS BEGIN SELECT intID, strQuestion, strAnswer, intCategory, intOrder FROM tblA -- Right here is where I am looking for the logic of the @flagInd to be evaluated..... -- if @flagInd = 1 then 'WHERE flgInd=1' -- else if @flagInd=0 then 'WHERE flgInd=0' -- else if @flagInd IS NULL then '' 语句作为IF语句的一部分的情况下完成。

2 个答案:

答案 0 :(得分:3)

这可以这样做:

SELECT intID, strQuestion, strAnswer, intCategory, intOrder
FROM tblA 
WHERE flgInd = @flgInd OR @flgInd IS NULL;

您还可以使用CASE表达式:

SELECT intID, strQuestion, strAnswer, intCategory, intOrder
FROM tblA 
WHERE CASE 
          WHEN flgInd = @flgInd THEN 1
          WHEN @flgInd IS NULL THEN 1 
          ELSE 0
       END = 1;

答案 1 :(得分:-1)

似乎只有一对一的映射(从参数到列),为什么不使用简单的where子句?

   CREATE PROCEDURE sprocA
    @flagInd int
    AS 
    BEGIN

    SELECT intID, strQuestion, strAnswer, intCategory, intOrder
    FROM tblA WHERE flgInd = @flagInd;