SQL Server 2008のSQL Serverデータベースにテーブルが存在するかどうかを確認するにはどうすればよいですか?


回答:


18

次のようなクエリを使用して、sysobjectsテーブルをクエリする場合

SELECT * FROM sysobjects WHERE xtype = 'U' AND name = 'yourTableName'

xtype = 'U'はユーザーテーブルです

次に、これをIF EXISTSステートメントでラップできます

IF EXISTS (SELECT * FROM sysobjects ...)
BEGIN
    ' do your stuff here if it exists
END 

5
+1 SQL Server 2005以降、Microsoftはこのような機能をDynamic Management Views(DMV)に移行していることに注意することが重要です。これは技術的には機能しますが、Microsoftはsys.tables DMVの使用を推奨しています。IF EXISTS(SELECT * FROM sys.tables WHERE type = 'U' AND name = 'yourTableName')。機能的には、あなたの声明と私の声明はまったく同じことをします。DMVに言及したかっただけです。DMVの詳細については、msdn.microsoft.com
M

それはいい電話です。マット。古い習慣は一生懸命に死にます:-)あなたの方が良い方法です。
マイルD

1
それが大きな違いを生むかどうかはわかりませんが、IF EXISTS(sys.tablesからSELECT 1を選択してください...)
デビッドヘイズ

@DavidHayesはい、列名を見つけるためにクエリを実行しないため、このソリューションの方が高速だと思います。
-Xriuk

12

それを見つけるもう一つの方法があります

IF OBJECT_ID('tablename') IS NULL
PRINT 'Table Does not Exist'

複雑なシステムテーブルを照会する必要がない、シンプルで素晴らしく ありがとう!
-Shadow9

2
たとえば、同じ名前のビューを検出しませんか?おそらくストアドプロシージャなどですか?
マリオ16

オブジェクトをスキーマ修飾する場合は別です。
グラント

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.