2017-08-16 10 views
0

複数のテーブルに複数の挿入を自動化しようとしています。動的SQLを使用して異なるテーブルに挿入を自動化する

基本的には、顧客コードを使用してテンポラリテーブルを1つ作成し、行番号を追加しました。私はまた、顧客コードと個人情報を含むソーステーブルを持っています。今度は、顧客1の人IDを#1に、PersonIDを顧客2からすべて#2に挿入したいと思います。

私はこのコードを使用しますが、それはエラーを生成します。

DECLARE @Customer_Code INT 
DECLARE @Row INT = 1 
DECLARE @SQL NVARCHAR (MAX) 


WHILE @Row = SELECT MAX(Rij) FROM #M 

BEGIN 
    SELECT @Customer_Code = Customer_Code FROM #M WHERE RowNr = @Row 

    SET @SQL = 

    'SELECT PersonID 
    INTO #@Customer_Code 
    FROM T_Sourcetable 
    WHERE YEAR (Date) = 2016 
     AND Customer_Code = @Customer_Code' 

    EXECUTE (@SQL) 

    SET @Row = @Row + 1 
    SET @SQL = '' 
END 

は、誰もがここで私を助けてもらえます。前もって感謝します。

PS。

M:実際にはCustomer_CodeとRowNumber関数

1,1 2,2 3,3 4,4

私は、MS SQL Serverのに2008

サンプル・データを使用しています、明らかに顧客コード!= RowNumber。

ソーステーブル:COLUMNS(Customer_Code PERSONID)

1, 8 , 
1, 9 , 
1, 10, 
1, 11, 
2, 9 , 
2, 12, 
2, 13, 
2, 14, 
3, 8 , 
3, 14, 
3, 15, 
3, 17, 
4, 8 , 
4, 10, 
4, 12, 
4, 14 

結果は次のようになります。

Table #1: 
PersonID 
8 
9 
10 
11 

Table #2 
PersonID 
9 
12 
13 
14 

Table #3 
PersonID 
8 
14 
15 
17 

Table #4 
PersonID 
8 
10 
12 
14 
+0

サンプルデータをDDL + DML(作成および挿入ステートメント)および望ましい結果として含めるように質問してください。 –

+0

このエディタには慣れていないようです。うまくいけば、あなたは私が何を意味するのか理解することができます。 –

+0

私はあなたが何を意味するのか理解したくありません。私はサンプルデータをコピー&ペーストし、作業の準備をしたいと思います。 –

答えて

1

あなたはWHILE @Rowを使用しています。これはブール式ではなく、おそらくWHILE @ROW <= SELECT MAX(Rij) FROM #Mのようなものを探しています。

さらに、SELECT...INTOを複数回実行しています。 2回目に実行されると、テーブル#@Customer_Codeが既に存在するため、SELECT...INTOを実行することはできませんが、代わりにINSERTを使用する必要があります。手前でテーブルを定義するのが最善です。 編集:Customer_Codeごとに一時テーブルを作成しようとしているとします。その場合は、変数を正しく追加する必要があります。同じことがAND Customer_Code = @Customer_Code'の場合、変数は保持する値ではなく、リテラル文字列として追加されます。 #M内のすべての行に対して実行されますクエリは次のとおりです。

SELECT PersonID 
    INTO #@Customer_Code 
    FROM T_Sourcetable 
    WHERE YEAR (Date) = 2016 
     AND Customer_Code = @Customer_Code 

これは明らかにあなたの意図ではありません。何が必要です:

'SELECT PersonID 
    INTO #'+ @Customer_Code + 
    'FROM T_Sourcetable 
    WHERE YEAR (Date) = 2016 
     AND Customer_Code = '+ @Customer_Code 

将来的にはエラーメッセージが表示された場合、あなたが行うことができます少なくとも、エラーメッセージが実際に言っていることを教えています!

+0

よろしいですか?メッセージ105、レベル15、状態1、行18 文字列 ' \tとCustomer_Code = @Customer_Code'の後ろには、閉じていない引用符があります。 –

+0

編集内容をご覧ください。 – HoneyBadger

+0

#mには –

関連する問題