是否可以在select语句中返回一列,只有在设置了变量的情况下?

时间:2012-06-15 18:45:21

标签: sql sql-server tsql

基本上,我想知道是否可以采取这个

IF @Value = 1
    SELECT col1, col2 FROM MyTable
ELSE
    SELECT col2 FROM MyTable

并在一个声明中做到这一点?像

这样的东西
SELECT IF(@Value = 1 col1), col2 FROM MyTable

我试过这个

SELECT case @Value when 1 then col1 end, col2 FROM MyTable

它总是返回2列,但是当@Value不是1时,第一列将为null。我希望仅当@Value为1时才返回2列,其余时间则返回1列。< / p>

1 个答案:

答案 0 :(得分:4)

使用动态SQL,是的。

DECLARE @sql NVARCHAR(MAX);
SELECT @sql = N'SELECT ' + CASE WHEN @Value = 1 THEN
  'col1, ' ELSE '' END + 'col2 FROM dbo.MyTable;';
PRINT @sql;
--EXEC sp_executesql @sql;

如果没有动态SQL,则无法真正更改结果集的形状。