2013-08-19 3 views

答えて

51

これを削除してから作成してから、SELECT INTOを使用して再度作成しようとしています。 MS SQL Serverので

DROP TABLE #TMPGUARDIAN 
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30), 
FRST_NAME NVARCHAR(30)) 

INSERT INTO #TMPGUARDIAN 
SELECT LAST_NAME,FRST_NAME 
FROM TBL_PEOPLE 

あなたはあなたがこの

CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30), 
FRST_NAME NVARCHAR(30)) 

INSERT INTO #TMPGUARDIAN(FRST_NAME,LAST_NAME) 
SELECT LAST_NAME,FRST_NAME FROM TBL_PEOPLE 

のようにクエリを変更する必要がありますSELECT INTO

5

を使用してCREATE TABLE声明ずにテーブルを作成することができます - 最後のセッションを行いますに変更すべての一時テーブルをクリアします。常に最後に落ちる。場合によっては、削除しようとしている間にテーブルが存在しない場合にエラーが発生することがあります。

DROP TABLE #TMPGUARDIAN 

あなたが(ないのインサートと一緒に)いくつかの工程の後に充填することができる新しい列を追加することによって、一時テーブルを変更する場合は、将来的には、その後に挿入を使用しているため、場合 に挿入使用することは避けてください。そのときは、同じ方法で再加工して設計する必要があります。これは変数のようになりますので、ドロップ文の

使用テーブル変数http://odetocode.com/articles/365.aspx

declare @userData TABLE(
LAST_NAME NVARCHAR(30), 
    FRST_NAME NVARCHAR(30) 
) 

メリット 必要はありません。スコープは実行直後に終了します。

21

私は通常、これらの行をストアドプロシージャの先頭に配置し、最後に配置します。

#tempテーブルの「存在」チェックです。あなたは(同じワークスペース/タブで)同じ.sqlファイルにINSERTクエリを書くようなので、あなたはあなたのクエリを作成INSERTクエリを実行し、一度愚かな間違いを犯すことがいくつかの時間が真上書かれており、すでに実行された

IF OBJECT_ID('tempdb..#MyCoolTempTable') IS NOT NULL 
begin 
     drop table #MyCoolTempTable 
end 
+1

私の場合、十分ではないようです。私が同じ2つの同じ選択を同じ "SELECT MyField INTO #TempTable"と書いているという単なる事実は、コンパイルエラーの原因になります。 2つのselect intoは同時に異なるヒットになることはありません。それにもかかわらず、2回同じ書き込みはできません。SELECT INTO –

+0

Select-Intoを使用しないでください。それは「ショートカット」です。 #tempTableを作成し、 "Insert into #MyTemp Select Col1 Col2 dbo.MyTable"構文を使用します。 – granadaCoder

3

それは、挿入クエリと共に実行を再び開始する。

これは、オブジェクト名(テーブル名)がすでに存在している理由です。なぜなら、2回目に実行されるためです。

したがって、実行しようとしている挿入またはドロップまたは任意のクエリを書き込むには、別のタブに行きます。

またはOPがテーブルを議論している間

CREATE -- … 
-- Insert query 
INSERT INTO -- … 
0

のように同じワークスペース内のすべてのクエリを、先行する他の利用コメント行、問題のかのオブジェクトがストアドプロシージャである、あなたが "を使用していることを確認しますあなたがコードを貼り付けた場合よ、

ALTER PROCEDURE

:」機能を変化させます「作成」を「変更」に置き換える必要があるかもしれません...これはちょうど私に起こり、イライラしています。だから私はこれが他人に起こることを願っています。

関連する問題