1

私はストアド プロシージャでしかこの動作を確認できず、構文がわかりません。基本的に、SQL クエリを呼び出す外部システムがあり、次のようなコードを使用して最初にテーブルが存在することを確認したいと考えています。

if (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND  TABLE_NAME = 'OrderUpdates'))
  BEGIN
    --return 1 or 0 if it exists or doesn't exist
  END

return ステートメントが正しく機能しません。

4

4 に答える 4

3
 SELECT CAST(COUNT(*) AS BIT) -- Should be unique to give 0 or 1 as result
 FROM INFORMATION_SCHEMA.TABLES
 WHERE TABLE_SCHEMA = 'dbo'
    AND TABLE_NAME = 'OrderUpdates'
    -- Not sure if you want views or not:
    AND TABLE_TYPE = 'BASE TABLE'
于 2012-04-05T21:55:47.430 に答える
1

あなたが何を得ているのかよくわかりません-RETURNはストアドプロシージャまたは関数でのみ有効です。

セットに同じものが必要な場合 (呼び出し元が行セットを予期しているため)、次のようなものが機能します。

SELECT 1 AS DoesItExist
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
    AND TABLE_NAME = 'OrderUpdates'
UNION ALL
SELECT 0
WHERE NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
    AND TABLE_NAME = 'OrderUpdates')
于 2012-04-05T21:55:33.360 に答える
0

SQL Serverには、データベース内のテーブルのリストを含む「tables」という名前のテーブルがあります。したがって、次のコードが役立ちます。

CREATE PROCEDURE DoesTableExist(@table VARCHAR(50), @exists BIT OUTPUT)
AS
BEGIN
IF EXISTS(SELECT * FROM sys.tables WHERE name = @table)
    SET @exists = 1
ELSE
    SET @exists = 0

RETURN @exists
END
于 2012-04-05T22:06:51.307 に答える
0

あなたはこのようなことをすることができます:

USE SomeDatabase;
IF OBJECT_ID('YourTable', 'U') IS NOT NULL 
BEGIN
    SELECT 1
END ELSE BEGIN
    SELECT 0
END

ユーザーテーブル以外のタイプを探している場合は、「U」を、OBJECT_IDにリストされているタイプによって決定される正しい値に変更できます。sys.objects

于 2012-04-05T22:08:31.173 に答える