Нет необходимости объявлять каждый столбец отдельно, как у Джорджа, вы можете построить его, используя FOR XML PATH
:
USE Sandbox;
GO
CREATE TABLE FirstTable (Id int, columnName sysname, isHidden bit);
INSERT INTO FirstTable
VALUES (1,N'Name',1),
(2,N'Email',1),
(3,N'Password',0),
(4,N'Country',1),
(5,N'State',1),
(6,N'filename',1),
(7,N'Salary',1);
GO
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'SELECT ' + ISNULL(STUFF((SELECT N',' + NCHAR(10) + N' ' + QUOTENAME(columnName)
FROM FirstTable
WHERE isHidden = 1 --0 (false) for the column "isHidden"? Seem counter intuitive.
FOR XML PATH(N'')),1,9,N''),N'*') + NCHAR(10) +
N'FROM SecondTable;';
PRINT @SQL; --Your Best Friend
--EXEC sp_executesql @SQL; --Uncomment to execute
GO
DROP TABLE FirstTable;
Если, однако, вы используете SSRS, я бы на самом деле предпочел бы использовать выражениетам, где прячутся столбцы, а не строится динамический SQL как этот.Тем более, что SSRS не может обрабатывать динамические столбцы.