当执行某个数据库名称,模式名称,表名称(必须在该特定dbname和schemaname中检查的表名称)时,有人可以帮助我检查表是否动态存在存储过程。因此,如果表存在,则执行一组函数else来执行另一组函数。
答案 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之间则必须执行的所有内容...