2015-12-24 5 views

ответ

0

Вы можете попробовать использовать IN как

select * from sys.tables where name IN ('tablename1','tablename2',...) 

или вместо этого вы можете попробовать

SELECT 1 
FROM systable INNER JOIN sysuserperm ON systable.creator = sysuserperm.user_id 
WHERE sysuserperm.user_name = 'yourusername' AND 
     systable.table_type = 'BASE' AND 
     systable.table_name IN ('tablename1', 'tablename2') 
GROUP BY sysuserperm.user_name, systable.table_type 
0

После можно использовать это:

USE DbName 
SELECT * 
FROM information_schema.tables 
WHERE TABLE_TYPE = 'BASE TABLE' 
     AND TABLE_NAME IN ('tb01','tbl02',...) 
0

Если у вас есть список имен таблиц в проверьте, поместите его в переменную таблицы и используйте код, аналогичный приведенному ниже:

declare @t table (
    SchemaName sysname not null, 
    ObjectName sysname not null, 
    primary key (ObjectName, SchemaName) 
); 

-- Populate this with your data 
insert into @t (SchemaName, ObjectName) 
values 
    (N'dbo', N'SomeTable1'), 
    (N'dbo', N'AnotherTable2'), 
    (N'abc', N'DEF'); 

if exists (
    select 0 from @t t 
     left join INFORMATION_SCHEMA.TABLES xt on xt.TABLE_SCHEMA = t.SchemaName 
      and xt.TABLE_NAME = t.ObjectName 
    where xt.TABLE_NAME is null 
    ) 
    select concat(t.SchemaName, N'.', t.ObjectName) as [MissingObject] 
    from @t t 
     left join INFORMATION_SCHEMA.TABLES xt on xt.TABLE_SCHEMA = t.SchemaName 
      and xt.TABLE_NAME = t.ObjectName 
    where xt.TABLE_NAME is null; 

Вышеупомянутый подход может быть легко расширен для нескольких видов объектов. Вы можете заменить INFORMATION_SCHEMA.TABLES на sys.all_objects и соответствующим образом изменить сравнение имен схемы.

Смежные вопросы