2017-11-02 11 views
0

私は、SQL Server内の変数があります。ストアドプロシージャで、私はこのSQL文を持っては、動的SQL Serverで列を追加

[Afghanistan],[Australia],[Bangladesh] 

どこか:

DECLARE @cols AS NVARCHAR(MAX); 

変数@colsは、これらの値が含まれていますが

SELECT ID, AccountTypeName AS Type 
FROM cte AS t 

に格納されている列名を使用してSQLサテライトを実行します。- この

SELECT ID, AccountTypeName, [Afghanistan], [Australia], [Bangladesh],[England] AS Type 
FROM cte AS t 

のように私の問題は、私はCTEを使用しています です。

+0

動的SQLを使用してolnyを実行できます。 cteはこの動的コード内に定義する必要があります – sepupic

+0

[動的に列sqlを作成する]の可能な複製(https://stackoverflow.com/questions/12643117/dynamically-create-columns-sql) – DrHouseofSQL

答えて

0

あなたは、動的なT-SQLステートメントを使用できます。ただし、クエリが

完全なダイナミックT-SQLクエリアプローチに見えるかどうか確認するためにPrintコマンドを使用

DECLARE @DynamicTSQLStatement NVARCHAR(MAX) = N'SELECT ID,AccountTypeName, ' + @cols + ' as Type from cte as t' 

EXEC sp_executesql @DynamicTSQLStatement 
0

をどのようにuの可能性

DECLARE @cols NVARCHAR(MAX), @Query NVARCHAR(MAX); 

SET @cols = '[Afghanistan],[Australia],[Bangladesh]'; 

SET @Query = N';WITH CTE AS (SELECT NULL [DATA]) SELECT [DATA], '[email protected]+' FROM CTE'; 

PRINT @Query; 

EXEC sp_executesql @Query; 

ここ

です CTEの一部ではない列にバインドされていますか? &なぜですか?

その他の方法あなたが直接、以下のようにCTEで動的な列を結合することができるしかし

SET @cols = 'NULL [Afghanistan],NULL [Australia],NULL [Bangladesh]'; 

SET @Query = N';WITH CTE AS (SELECT NULL [DATA], '[email protected]+') SELECT * FROM CTE'; 

@query結果:

;WITH CTE AS (SELECT NULL [DATA], NULL [Afghanistan],NULL [Australia],NULL [Bangladesh]) SELECT * FROM CTE 

EXEC sp_executesqlを@query結果:

DATA Afghanistan Australia Bangladesh 
NULL NULL  NULL  NULL 
関連する問題