SQL Serverには次の問題があります。次のようなコードがあります。
DROP TABLE #TMPGUARDIAN
CREATE TABLE #TMPGUARDIAN(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30))
SELECT LAST_NAME,FRST_NAME INTO #TMPGUARDIAN FROM TBL_PEOPLE
これを行うと、「データベースに「#TMPGUARDIAN」という名前のオブジェクトが既に存在します」というエラーが表示されます。このエラーが発生する理由を教えてもらえますか?
ドロップしてから作成し、SELECT INTO
を使用して再度作成しようとしています。への変更:
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
MS SQL Serverでは、CREATE TABLE
を使用して、SELECT INTO
ステートメントなしでテーブルを作成できます。
通常、これらの行はストアドプロシージャの最初に配置し、最後に配置します。
これは、#tempテーブルの「存在する」チェックです。
IF OBJECT_ID('tempdb..#MyCoolTempTable') IS NOT NULL
begin
drop table #MyCoolTempTable
end
このようにクエリを変更する必要があります
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
-すべての一時テーブルをクリアするための最後のセッションを作成します。常に最後にドロップします。あなたの場合、削除しようとしているときに、テーブルが存在しない場合にエラーが発生することがあります。
DROP TABLE #TMPGUARDIAN
insert intoの使用を避けるいくつかのプロセス(挿入を伴わない)。その時点で、同じ方法で作り直して設計する必要があります。
テーブル変数を使用 http://odetocode.com/articles/365.aspx
declare @userData TABLE(
LAST_NAME NVARCHAR(30),
FRST_NAME NVARCHAR(30)
)
利点これは変数に似ているため、Dropステートメントは不要です。実行直後にスコープが終了します。
同じ.sqlファイル(同じワークスペース/タブ)に挿入クエリを書くなどのばかげた間違いをすることがあります。そのため、作成クエリが直前に記述されて既に実行されている挿入クエリを実行すると、再び実行が開始されます挿入クエリを使用します。
これが、オブジェクト名(テーブル名)を取得する理由です。2回目に実行されるためです。
別のタブに移動して、挿入またはドロップ、または実行しようとしているクエリを記述します。
または、同じワークスペース内のすべてのクエリの前にコメント行を使用します
CREATE -- …
-- Insert query
INSERT INTO -- …