检查表是否动态存在

时间:2017-06-28 11:16:12

标签: sql-server stored-procedures

当执行某个数据库名称,模式名称,表名称(必须在该特定dbname和schemaname中检查的表名称)时,有人可以帮助我检查表是否动态存在存储过程。因此,如果表存在,则执行一组函数else来执行另一组函数。

3 个答案:

答案 0 :(得分:1)

对于表架构,表名

将print语句替换为您要执行的查询:

CREATE PROCEDURE [dbo].[TableCheck]
    @tableschema VARCHAR(100),
    @tablename VARCHAR(100)
AS
BEGIN

    IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = @tableschema
                 AND  TABLE_NAME = @tablename))


        BEGIN
            print 'Table '+ @tablename +' Exists';
        END

    ELSE
        print 'Table '+ @tablename +' Does Not Exists';

END

输出:

exec TableCheck dbo, test_table_name

表test_table_name不存在

以类似的方式,您可以包含少量谷歌搜索的数据库名称。

根据评论进行更新: 另一种方法可能是

CREATE PROCEDURE [dbo].[TableCheck]
    @tableschema VARCHAR(100),
    @tablename VARCHAR(100)
AS
BEGIN

    IF EXISTS ( SELECT  1 FROM sys.schemas WHERE   name = @tableschema ) 
    BEGIN
        IF (EXISTS (SELECT 1 FROM sys.Objects WHERE  Object_id = OBJECT_ID(@tablename) AND Type = N'U'))
            BEGIN
            print 'Table '+ @tablename +' Exists';
            END

        ELSE
            print 'Table '+ @tablename +' Does Not Exists';
    END

    ELSE
        print 'Schema '+@tableschema+' does not exists'
END

----- Sean Lange编辑-------

Prabhat G要求了解如何加入sys.objects和sys.schemas

select * 
from sys.objects o
join sys.schemas s on s.schema_id = o.schema_id
where o.name = @tablename
    and s.name = @tableschema

答案 1 :(得分:1)

OBJECT_ID()功能将由三部分组成。如下所示:

if (OBJECT_ID('db.schema.table') is not null)
   print 'table exists'
else
   print 'table doesn't exist'

答案 2 :(得分:0)

你应该连同数据库名称+'。' +架构名称+'。' +表名,然后执行IF OBJECT_ID(@YourString)IS NOT NULL并在之后放置一个BEGIN END ...如果表存在于此BEGIN和END之间则必须执行的所有内容...