Dynami c SQL для сохранения результата выполнения в переменной и объединения этого результата для формирования полного запроса - PullRequest
0 голосов
/ 09 марта 2020

Я пытался сделать запрос с динамическим c именем столбца. Так что последний запрос может быть выполнен

DECLARE @SQLFinal NVARCHAR(MAX)
DECLARE @SQLAlias NVARCHAR(MAX)='SELECT '',''+cast(ColumnName as varchar(20)) + '' as '' + cast(ColAliasName as varchar(20)) collate Latin1_General_CI_AS from #colandAlias' 
DECLARE @SQLAliasResult NVARCHAR(MAX)
EXEC sp_executesql @SQLAlias= @SQLAliasResult OUTPUT
select  @SQLAliasResult 

- Присвоил результат sp_execute переменной, @ SQLAliasResult.It дает NULL вместо exe c result

- целью является объединение вышеуказанного результата (@SQLAliasResult) с частью запроса belwo для формирования полного запроса

set @SQLFinal='SELECT

ID,Name,custid '

+@SQLAliasResult+
' FROM dbo.tableCustomer where custid=71'

EXEC @SQLFinal

- как присвоить результат выполнения запроса в переменной и выполнить @SQLFinal?

--- вывод the@SQLAliasResult

,col1 as [201911]
,col2 as [201912]
,col1 as [202001]
,col2 as [202002]

- Содержимое @SQLFinal

SELECT
ID,Name,custid 
,col1 as [201911]
,col2 as [201912]
,col1 as [202001]
,col2 as [202002]
FROM dbo.tableCustomer where custid=71

exe c @SQLFinal выдаст требуемый выход из dbo.tableCustomer с сгенерированными псевдонимами

1 Ответ

1 голос
/ 09 марта 2020

Я думаю, что нет необходимости в динамическом c запросе в строке 2, я не вижу динамических c полей. Кроме того, я думаю, что вам нужно что-то вроде этого:

DECLARE @Columns TABLE(
    ColumnName SYSNAME
)

INSERT INTO @Columns VALUES ( 'Column1' ), ( 'Column2' );

DECLARE @SelectString   VARCHAR(255)

-- This is the sentence that is going to concat everything
SELECT  @SelectString = ISNULL( @SelectString + ', ', '' ) + ColumnName
    FROM @Columns;

-- Execute this or do what you need
SELECT @SelectString;
...