我想创建一个存储过程,该存储过程的参数指示应选择哪些字段。
例如,我想将两个参数“ selectField1”和“ selectField2”分别作为布尔值传递。
然后我想要类似的东西
SELECT if (selectField1 = true) Field1 ELSE do not select Field1 if (selectField2 = true) Field2 ELSE do not select Field2 FROM Table
谢谢卡尔
听起来他们想要只返回允许的字段的能力,这意味着返回的字段数也必须是动态的。这将使用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)