2016-08-03 4 views
0

でテーブルのレコードをループ私は、次のようなテーブルを持っている:SQL Serverの

Screenshot of table

ColumnNameの各レコードは、別のテーブル、regressionDifferences内の列の名前が含まれています。 ColumnNameをループし、regressionDifferencesの各列を選択してColumnContentに挿入したいと思います。現時点では、私は画面にコラムの内容を印刷することに焦点を当てています。そして、それを挿入することを心配します。 これは私がこれまでに書かれたものです:

DECLARE @LoopCounter INT = 1, @MaxRowNumber INT = 42762, 
@ColumnName VARCHAR(max), @UniqueID VARCHAR(max) 

WHILE(@LoopCounter < @MaxRowNumber) 

BEGIN 

SELECT @ColumnName = ColumnName 
FROM ColumnDifference WHERE RowNumber = @LoopCounter 

SELECT @UniqueID = UniqueID 
FROM ColumnDifference WHERE RowNumber = @LoopCounter 

SELECT DISTINCT @ColumnName AS ColumnContent FROM regressionDifferences rD 
WHERE rD.UniqueID LIKE @UniqueID + '%' 

SET @LoopCounter = @LoopCounter + 1 

END 

を各列の実際の内容とは対照的に、これは単なるなど、すなわちa_4, a_4, a_4, a_10, a_11, a_6、列の名前を返しているいくつかの理由。

どこに間違っているのかお手伝いできますか?

おかげ

答えて

1
declare @sql varchar(max); 
set @sql ='SELECT DISTINCT ' + @ColumnName + 'AS ColumnContent FROM regressionDifferences rD WHERE rD.UniqueID LIKE ''' 
         + @UniqueID + '%''' 
exec(@sql); 

必要な動的SQLを作成するには、上記のクエリを使用します。

あなたの動的なクエリでは、あなたの動的なクエリで列名として扱われていない

SELECT DISTINCT 'a_4' AS ColumnContent FROM regressionDifferences rD 
WHERE rD.UniqueID LIKE '2016-07-26''+ '%' 

変数@ColumnNameに相当します。それはテキストとして扱われます

+0

あなたは大歓迎です@MNiGruag –

-1
SELECT DISTINCT @ColumnName AS ColumnContent FROM regressionDifferences rD 
WHERE rD.UniqueID LIKE @UniqueID + '%' 

何か他のものである必要はあり@ColumnNameべきではないでしょうか。

+0

なぜそれを言うのですか?私は動的SQLの新人ですが、私はそうだと思う、私はそれをループとして、ColumnName列の各レコードに@ColumnNameを設定し、それは私が他のテーブルから選択したいものです。私は間違っている可能性がある! – MNiGruag

+0

ColumnNameを2回選択しています。つまり、最初のクエリの結果が3番目のクエリで上書きされます。私はColumnName2を作成し、それを3番目のクエリで使用することをお勧めします。私はあなたの質問を正しく理解することを願っています。 – Dennisvdh

+0

あなたは答えによって質問するべきではありません。特にOPが何を頼んでいるのかわからない場合。その場合、あなたは単に質問を無視し、あなたが理解してうまくいけば答える別のものに移動します。コメントを残すために十分な担当者を集めるようにこれを繰り返します。コメントでは、好きなだけ説明を求めることができます。 –