0

基本上,我想知道是否可以接受这个

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 时,第一列将为空。我希望它仅在 @Value 为 1 时返回 2 列,其余时间为 1 列。

4

1 回答 1

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,您将无法真正改变结果集的形状。

于 2012-06-15T18:50:10.760 回答