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

E.g。我想传递两个参数“selectField1”和“selectField2”各自的bool。

然后我想是这样

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将有助于倍数。这方面的例子是假设ATLEAST 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)

其他提示

SQL,你做这种方式:

SELECT  CASE WHEN @selectField1 = 1 THEN Field1 ELSE NULL END,
        CASE WHEN @selectField2 = 1 THEN Field2 ELSE NULL END
FROM    Table

关系模型并不意味着动态字段计数。

相反,如果你不感兴趣的一个字段的值,你只需选择一个NULL,而不是和解析它在客户端上。

您想 CASE声明

SELECT
  CASE 
    WHEN @SelectField1 = 1 THEN Field1
    WHEN @SelectField2 = 1 THEN Field2
    ELSE NULL
  END AS NewField
FROM Table

编辑:我的例子是两个场组合为一个场,这取决于所提供的参数。它是一种的一个或 - 既不溶液(不是两个)。如果你想有输出这两个领域的可能性,使用Quassnoi的解决方案。

@selectField1 AS bit
@selectField2 AS bit

SELECT
CASE 
    WHEN @selectField1 THEN Field1
    WHEN @selectField2 THEN Field2
    ELSE someDefaultField
END
FROM Table

这是你要找的是什么?

这是这样做的伪方式

IF (selectField1 = true) 
SELECT Field1 FROM Table
ELSE
SELECT Field2 FROM Table

你想要的是:

    MY_FIELD=
        case 
            when (selectField1 = 1) then Field1
                                 else Field2        
        end,

在选择

不过,y不只是你未在程序显示列?

在小白方式做到这一点:

SELECT field1, field2 FROM table WHERE field1 = TRUE OR field2 = TRUE

您可以在如果其他编程语言只是做一个妥善管理这些信息。

实施例中ASP / JavaScript的

// Code to retrieve the ADODB.Recordset
if (rs("field1")) {
   do_the_stuff_a();
}
if (rs("field2")) {
   do_the_stuff_b();
}
rs.MoveNext();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top