Ваши диапазоны не одинакового размера, и вы, вероятно, должны использовать SUMPRODUCT вместо COUNTIFS.
Если у вас есть строка заголовка в строке 1,
=SUMPRODUCT(--($A$2:$A$7="eggs"), --($B$2:$B$7>$C$2:$C$7))
Если нет строки заголовка и ваши данные начинаются в строке 1,
=SUMPRODUCT(--($A$1:$A$6="eggs"), --($B$1:$B$6>$C$1:$C$6))
Существует схема Information_Schema, которая представляет собой набор представлений таблиц из схемы SYS, которые вы можете запросить, чтобы получить желаемое.
Обратной стороной Information_Schema является то, что вам нужно написать один запрос для каждого типа объекта. Плюс в том, что Information_Schema более удобна для чтения.
Схема Sys поначалу может показаться немного загадочной, но она содержит ту же информацию в одном месте.
По сути, в каждой базе данных есть таблица с именем SysObjects, в которой есть имена всех объектов и их типы.
] Итак, вам нужно выполнить поиск в базе данных следующим образом:
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
Теперь, если вы хотите ограничить это поиском только таблиц и сохраненных процедур, вы бы сделали
Select [name] as ObjectName, Type as ObjectType
From Sys.Objects
Where 1=1
and [Name] like '%YourObjectName%'
and Type in ('U', 'P')
Если вы посмотрите типы объектов, вы найдете целый список представлений, триггеров и т. д.
Теперь, если вы хотите найти это в каждой базе данных, вам придется перебирать базы данных. Вы можете выполнить одно из следующих действий:
Если вы хотите выполнить поиск по каждой базе данных без каких-либо предложений, используйте процедуру sp_MSforeachdb, как показано в ответе здесь.
Если вы хотите выполнять поиск только в определенных базах данных, используйте команду «USE DBName ", а затем команду поиска.
В этом случае вы получите большую выгоду от ее параметризации. Обратите внимание, что имя базы данных, в которой вы выполняете поиск, необходимо будет заменить в каждом запросе (DatabaseOne, DatabaseTwo ...). Проверьте это:
Declare @ObjectName VarChar (100)
Set @ObjectName = '%Customer%'
Select 'DatabaseOne' as DatabaseName, [name] as ObjectName, Type as ObjectType
From DatabaseOne.Sys.Objects
Where 1=1
and [Name] like @ObjectName
and Type in ('U', 'P')
UNION ALL
Select 'DatabaseTwo' as DatabaseName, [name] as ObjectName, Type as ObjectType
From DatabaseTwo.Sys.Objects
Where 1=1
and [Name] like @ObjectName
and Type in ('U', 'P')
UNION ALL
Select 'DatabaseThree' as DatabaseName, [name] as ObjectName, Type as ObjectType
From DatabaseThree.Sys.Objects
Where 1=1
and [Name] like @ObjectName
and Type in ('U', 'P')
select db_name(), * From sysobjects where xtype in ('U', 'P') And name = 'OBJECT_name'
столбец First отобразит имя базы данных, где объект расположен в.
sp_MSforeachdb 'select db_name(), * From ?..sysobjects where xtype in (''U'', ''P'') And name = ''ObjectName'''
Вместо «ObjectName» вставьте объект, который вы ищете. В первом столбце будет отображаться имя базы данных, в которой расположен объект.
Самый простой способ - открыть information_schemas ...
SELECT *
FROM information_schema.Tables
WHERE [Table_Name]='????'
SELECT *
FROM information_schema.Views
WHERE [Table_Name]='????'
SELECT *
FROM information_schema.Routines
WHERE [Routine_Name]='????'
Процедуру sp_MSforeachdb можно использовать для поиска во всех базах данных.
объявить @RETURN_VALUE int
declare @ command1 nvarchar (2000)
set @ command1 = "Здесь идет ваша команда"
exec @RETURN_VALUE = sp_MSforeachdb @ command1 = @ command1
Raj