小编典典

SQL条件选择

sql

我想创建一个存储过程,该存储过程的参数指示应选择哪些字段。

例如,我想将两个参数“ selectField1”和“ selectField2”分别作为布尔值传递。

然后我想要类似的东西

SELECT

if (selectField1 = true) Field1 ELSE do not select Field1

if (selectField2 = true) Field2 ELSE  do not select Field2

FROM Table

谢谢卡尔


阅读 191

收藏
2021-04-15

共1个答案

小编典典

听起来他们想要只返回允许的字段的能力,这意味着返回的字段数也必须是动态的。这将使用2个变量。除此之外,任何其他事情都会变得令人困惑。

IF (selectField1 = true AND selectField2 = true)
BEGIN
   SELECT Field1, Field2
   FROM Table
END
ELSE IF (selectField1 = true)
BEGIN
   SELECT Field1
   FROM Table
END
ELSE IF (selectField2 = true)
BEGIN
   SELECT Field2
   FROM Table
END

动态SQL将帮助倍数。此示例假设至少有1列为真。

DECLARE @sql varchar(MAX)
SET @sql = 'SELECT '
IF (selectField1 = true)
BEGIN
   SET @sql = @sql + 'Field1, '
END
IF (selectField2 = true)
BEGIN
   SET @sql = @sql + 'Field2, '
END
...
-- DROP ', '
@sql = SUBSTRING(@sql, 1, LEN(@sql)-2)

SET @sql = @sql + ' FROM Table'

EXEC(@sql)
2021-04-15