在Select Query Sql Server中选择Columns

时间:2014-03-07 17:48:52

标签: sql-server

Declare @tempvar as Varchar(10)
    Set @tempvar='true'

    select dbo.InformationTable.Name,dbo.InformationTable.Address,dbo.InformationTable.FavoriteDish
    from dbo.InformationTable

我只想在dbo.InformationTable.FavoriteDish设置为@tempvar时显示true列,否则它不会包含在select语句中?我怎样才能实现此功能。谢谢。

1 个答案:

答案 0 :(得分:1)

不幸没有有效的方式有条件地从SELECT查询中排除列。

你可以这样做:

DECLARE @tempvar AS VARCHAR(10)
SET @tempvar='true'

IF @tempvar = 'true'
BEGIN
    SELECT
        dbo.InformationTable.Name,
        dbo.InformationTable.Address,
        dbo.InformationTable.FavoriteDish
    FROM
        dbo.InformationTable
END
ELSE
BEGIN
    SELECT
        dbo.InformationTable.Name,
        dbo.InformationTable.Address
    FROM
        dbo.InformationTable
END

或者,如果您不介意将列作为结果集的一部分降序(具有NULL值),请执行以下操作:

SELECT
    dbo.InformationTable.Name,
    dbo.InformationTable.Address,
    CASE
        WHEN @tempvar = 'true' THEN
            dbo.InformationTable.FavoriteDish
        ELSE NULL
    END FavoriteDish
FROM
    dbo.InformationTable

您还可以在VARCHAR变量中动态构建查询,并将其传递给EXEC方法:

DECLARE @myquery VARCHAR(1000)

/*
Build your query here on your own conditions
*/

EXEC(@myquery)

我强烈反对最后一个,因为it comes with multiple tradeoffs

希望有所帮助。