7

次のコードを検討してください。

SET @SQL1 = 'SELECT * INTO #temp WHERE ...'
exec(@SQL1)
SELECT * from #temp  (this line throws an error that #temp doesn't exist)

どうやらこれは、execコマンドが別のセッションをスピンオフし、#tempがそのセッションに対してローカルであるためです。グローバル一時テーブル##tempを使用できますが、衝突を回避するための命名スキームを考え出す必要があります。皆さんは何をお勧めしますか?

4

8 に答える 8

6

テンプレートテーブルを明示的に作成しようとしましたか?

Create Table #temp (..)
于 2009-03-27T01:19:16.220 に答える
6

##temp を試してください。動的クエリが他のファイバーで実行されるため、ローカルの一時テーブルが表示されないためです。代わりに、一時テーブルをグローバルのように宣言すると、意味があります。

于 2009-09-17T19:19:33.600 に答える
2

execの前にtempを作成し、execを使用してtempテーブルにデータを入力できます。

于 2009-03-27T01:20:59.663 に答える
2

必要なすべてを実行できる実行可能なソリューションが見つからなかったため、代わりに ##global temp テーブルの使用に切り替えました。

于 2009-03-31T18:04:57.440 に答える
1

例として、「into」を見てください。

SELECT o.OrderID, o.OrderDate, od.UnitPrice, od.Quantity,
       c.CustomerID, c.CompanyName, c.Address, c.City, c.Region,
       c.PostalCode, c.Country, c.Phone, p.ProductID,
       p.ProductName, p.UnitsInStock, p.UnitsOnOrder
INTO   #temp
FROM   Orders o
JOIN   [Order Details] od ON o.OrderID = od.OrderID
JOIN   Customers c ON o.CustomerID = c.CustomerID
JOIN   Products p ON p.ProductID = od.ProductID
于 2010-04-05T15:46:05.810 に答える
0

; を挿入した後に選択を入れることはできませんか?2 つのステートメントを一緒に区切り、実行しますか?

于 2009-03-27T01:59:48.183 に答える
0

もう 1 つの方法は、動的 SQL 内のすべてのコードを使用することです。

SET @SQL1 = 'SELECT * INTO #temp WHERE ...
SELECT * from #temp  ' 
exec(@SQL1) 
于 2010-06-08T07:56:55.300 に答える