- PR -

CREATE TABLEをする前のテーブル存在チェック

1
投稿者投稿内容
eich2509
会議室デビュー日: 2007/03/06
投稿数: 13
投稿日時: 2007-03-06 23:16
CREATE TABLEをする前に既にそのテーブルが存在する場合に
DROP TABLEをしたいのですが、

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[テーブル名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE [dbo].[テーブル名]

ストアドの中でテーブル名を変数(@TableName)で持たせているのですが
こういう場合はどのように書いたらよいですか?

ちなみに、単純に[dbo].[テーブル名]を@TableNameに置き換えてみましたが
エラーになりました。。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-03-06 23:25
SQLServerでしょうか?
引用:

chie0925さんの書き込み (2007-03-06 23:16) より:
ちなみに、単純に[dbo].[テーブル名]を@TableNameに置き換えてみましたが
エラーになりました。。


どういうエラーが返ってきますか?DROPまで出来れば「CREATE TABLE @TableName」は問題ないんですよね?

#なんだか「?」だらけで申し訳ないです
eich2509
会議室デビュー日: 2007/03/06
投稿数: 13
投稿日時: 2007-03-06 23:31
書き込みありがとうございます。

SQLServer2000です。

if exists (select * from dbo.sysobjects where id = object_id(N@TableName) and OBJECTPROPERTY(id, N'IsUserTable') = 1)

SET @Sql = 'DROP TABLE ' + @TableName
EXEC(@Sql)

という風に書きました。
(変数の場合、単純に DROP TABLE @TableName とはできないようです)

エラーは「@TableNameがありません(変数を指定してください、のような)」
はっきり覚えていないので、明日また実際にやってみてエラー内容を
書き込みたいと思います。

If〜を書かずに、直接、上のDROP TABLEを書くと処理は実行されていました。

[ メッセージ編集済み 編集者: chie0925 編集日時 2007-03-06 23:33 ]
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-03-06 23:46
うーん・・MSSQLのストアドは(も)不知ですが

SET @Sql = 'if exists (select * from dbo.sysobjects where id = object_id(N' +
@TableName + ') and OBJECTPROPERTY(id, N'IsUserTable') = 1) ' +
'DROP TABLE ' + @TableName
EXEC(@Sql)

などとは書けないんですかねぇ(汗
eich2509
会議室デビュー日: 2007/03/06
投稿数: 13
投稿日時: 2007-03-07 09:09
引用:

shimixさんの書き込み (2007-03-06 23:46) より:
うーん・・MSSQLのストアドは(も)不知ですが

SET @Sql = 'if exists (select * from dbo.sysobjects where id = object_id(N' +
@TableName + ') and OBJECTPROPERTY(id, N'IsUserTable') = 1) ' +
'DROP TABLE ' + @TableName
EXEC(@Sql)



おはようございます。
今朝、デスクに向かってすぐに上記の方法で試してみました。

できました!!!

本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)