我想创建一个存储过程,其中包含指示应选择哪些字段的参数。
E.g。我想将两个参数“selectField1”和“selectField2”分别作为bools传递。
然后我想要像
这样的东西SELECT
if (selectField1 = true) Field1 ELSE do not select Field1
if (selectField2 = true) Field2 ELSE do not select Field2
FROM Table
由于 卡尔
答案 0 :(得分:55)
在SQL
中,您可以这样做:
SELECT CASE WHEN @selectField1 = 1 THEN Field1 ELSE NULL END,
CASE WHEN @selectField2 = 1 THEN Field2 ELSE NULL END
FROM Table
关系模型并不意味着动态字段计数。
相反,如果您对字段值不感兴趣,只需选择NULL
,然后在客户端上解析它。
答案 1 :(得分:17)
你想要CASE
statement:
SELECT
CASE
WHEN @SelectField1 = 1 THEN Field1
WHEN @SelectField2 = 1 THEN Field2
ELSE NULL
END AS NewField
FROM Table
编辑:我的例子是将两个字段组合成一个字段,具体取决于提供的参数。它是 one-both-both 解决方案(不是两者)。如果您希望在输出中同时包含两个字段,请使用Quassnoi的解决方案。
答案 2 :(得分:9)
听起来他们希望能够只返回允许的字段,这意味着返回的字段数也必须是动态的。这将适用于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将有助于倍数。这个例子假设至少有一列是真的。
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)
答案 3 :(得分:2)
@selectField1 AS bit
@selectField2 AS bit
SELECT
CASE
WHEN @selectField1 THEN Field1
WHEN @selectField2 THEN Field2
ELSE someDefaultField
END
FROM Table
这是你要找的吗?
答案 4 :(得分:0)
这是一种伪方式
IF (selectField1 = true)
SELECT Field1 FROM Table
ELSE
SELECT Field2 FROM Table
答案 5 :(得分:0)
你想要的是:
MY_FIELD=
case
when (selectField1 = 1) then Field1
else Field2
end,
选择中的
但是,你不是只是不在程序中显示该列吗?
答案 6 :(得分:-1)
noob方式:
SELECT field1, field2 FROM table WHERE field1 = TRUE OR field2 = TRUE
您可以使用编程语言正确管理此信息,只执行if-else。
ASP / JavaScript中的示例
// Code to retrieve the ADODB.Recordset
if (rs("field1")) {
do_the_stuff_a();
}
if (rs("field2")) {
do_the_stuff_b();
}
rs.MoveNext();