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 回答