2017-07-18 5 views
0

一部の動的SQLで一時テーブルを作成しています。しかし、私はそれを呼び出すときに "無効なオブジェクト名 '#Settlement_Data_Grouped'"エラーがスローされます。動的TSQLで一時テーブルにアクセスできません

enter image description here enter image description here

私は、動的SQLは、それ自身の別々のインスタンスを使用しているため、それだと仮定していますか?だからそれは落とされ、外部のSQLでは利用できないのですか? ## Settlement_Data_Groupedを使用するか、テーブルを作成すると動作します。しかし、これは複数の人々がsprocを呼び出しているときに役立ちません。

テーブルが存在するかどうかを確認できますが、それはコンテンツを削除する必要があり、異なるユーザーが異なる出力を必要とするため、動作しないことを意味します。

誰もが解決策や提案を持っていますが、私は複数の人が同じsprocを呼び出せる場所で使用できますか?

+0

このページの "関連する"リンクのうち、[this](https://stackoverflow.com/)質問/ 2917728/t-sql-dynamic-sql-and-temp-tables?rq = 1)と[this](https://stackoverflow.com/questions/40521021/insert-data-into-temporary-table-from -dynamic-query-table-output?rq = 1)を指定します。彼らは助けてくれますか?そもそも一見すると、動的SQLを使用する必要があることは明らかではありません。反復コードは必ずしもひどいものではありません。 – HABO

答えて

1

IMHOあなたはDynamic SQLは必要ありません。以下のようなコードを変更することができます。これは、達成しようとしているのと同じ結果をもたらすでしょう。構文エラーがある場合はそれを確認してください。私は完全なクエリを提供していたが、あなたの質問では、コードの代わりにスクリーンショットがあります。だからここに行く。

あなたがTemp Tablesを使用する場合:

SELECT 
...... 
INTO #Settlement_Data_Grouped 
FROM #Settlement_Data 
WHERE (Payment_Date < Settlement_Date AND @outputType = 1) ---This will be true when you have @outputType = 1 
    OR @outputType = 0 ---This will be true when you have @outputType = 0 
GROUP BY Part_No 
    ,NAME 
    ,Order_No 
    ,Invoice_No 

------------- 
SELECT 
...... 
FROM #Settlement_Data_Grouped 

あなたがCTEを使用する場合:

WITH Settlement_Data_Grouped 
AS (
SELECT 
...... 
FROM #Settlement_Data 
WHERE (Payment_Date < Settlement_Date AND @outputType = 1) ---This will be true when you have @outputType = 1 
    OR @outputType = 0 ---This will be ture when you have @outputType = 0 
GROUP BY Part_No 
    ,NAME 
    ,Order_No 
    ,Invoice_No 
) 

SELECT 
...... 
FROM Settlement_Data_Grouped 
+0

私は実際これをやってしまったばかりで、今あなたのコメントを読んでいます。時には答えが分かりにくいですが、木の木が見えません。 – Danrex

1

問題は一時テーブルにのみ内に存在するということです動的SQL実行コンテキストのスコープ動的SQLの外にtempテーブルを作成し、それに挿入する方法です。

関連する問題