Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поиск объекта на серверах по имени  [new]
AndrF
Member

Откуда:
Сообщений: 2183
Для поиска объекта на серверах по имени пытаюсь задействовать процедуру описанную по данной ссылке.

Одну ошибку в ней уже нашел и поправил.

Осталась еще одна, а именно:

Код процедуры выполняется в SSMS для группы серверов. Так как в группе серверов есть сервера с разными Collation, то символы кириллицы в отдельных базах могут выводится вопросиками. Соответственно и объект обозванный по русски найти в них не найдется.

Соответственно и вопрос - возможно ли как-то исправить это дело?

Или кто знает другой способ реализации поиска объектов, применимых на серверах начиная с версии SQL 2005?
2 авг 18, 14:21    [21624805]     Ответить | Цитировать Сообщить модератору
 Re: Поиск объекта на серверах по имени  [new]
iiyama
Member

Откуда:
Сообщений: 642
AndrF,
используете NVARCHAR
2 авг 18, 15:44    [21625209]     Ответить | Цитировать Сообщить модератору
 Re: Поиск объекта на серверах по имени  [new]
AndrF
Member

Откуда:
Сообщений: 2183
iiyama
используете NVARCHAR


Это абсолютно не причем!
-------------------------------

В общем, частично поправил скрипт из ссылки первого сообщения - сейчас результаты поиска выдаются без вопросиков в имени базы, заодно он стал покороче:

DECLARE @objname varchar(200)
DECLARE @objtype char(1)

SET @objname = 'proc_ECM_DeleteGroup'
SET @objtype = ''

DECLARE @sqlstr nvarchar(200), @s nchar(1)
/*
Значения @objtype
C  = 'CHECK' 
D  = 'Default' 
F  = 'FOREIGN KEY' 
L  = 'Log' 
FN = 'Scalar function' 
IF = 'Inlined table-function' 
P  = 'Stored procedure' 
PK = 'PRIMARY KEY' 
RF = 'Replication filter stored procedure' 
S  = 'System table' 
TF = 'Table function' 
TR = 'Trigger' 
U  = 'User table' 
UQ = 'UNIQUE constraint' 
V  = 'View' 
X  = 'Extended stored procedure' 

Вставляйте специальные символы (wildcards), если не требуется точный поиск.
Set @objname = '%' + @objname + '%' -- Лучше определять пользовательские специальные символы (custom wildcards) для входного параметра @objname
*/
-- Удаление временной таблицы, если она существует
IF OBJECT_ID('tempdb..#tblDBObjects') IS NOT NULL
	DROP TABLE #tblDBObjects
-- Создание временной таблицы
CREATE TABLE #tblDBObjects (
	dbName sysname,
	objName varchar(200),
	objtype char(2)
	)

IF NOT UPPER(ISNULL(@objtype,'%')) IN('C','D','F','L','FN','IF','P','PK','RF','S','TF','TR','U','UQ','V','X','%')
	SET @objtype = '%'

SELECT @sqlstr = 'USE [?];
INSERT #tblDBObjects SELECT db_name() AS DBName, name, xtype FROM [?]..sysobjects WHERE xtype LIKE ''' + @objtype + ''''

EXEC master.sys.sp_MSforeachdb @command1 = @sqlstr

-- Если параметр @objname не передан, то результат все равно должен быть возвращен
SET @objname = ISNULL(@objname, '%')
SELECT * FROM #tblDBObjects WHERE objName LIKE @objname


В принципе, осталось сделать корректный поиск русских наименований на серверах с различными Collation, но это пока влом ибо в данный момент не нужно по работе.
2 авг 18, 16:18    [21625385]     Ответить | Цитировать Сообщить модератору
 Re: Поиск объекта на серверах по имени  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
AndrF,
автор
без вопросиков в имени базы
это настолько глупо, что даже мило
2 авг 18, 16:33    [21625450]     Ответить | Цитировать Сообщить модератору
 Re: Поиск объекта на серверах по имени  [new]
AndrF
Member

Откуда:
Сообщений: 2183
TaPaK
AndrF,
автор
без вопросиков в имени базы
это настолько глупо, что даже мило


Ну, пытаюсь изъясняться так чтобы доходило...

А вот так скрипт работать стал побыстрей (для пары серверов не столь важно, а на сотне-другой серверов заметно):

DECLARE @objname varchar(128)
DECLARE @objtype char(1)

SET @objname = 'proc_%DeleteGroup'
SET @objtype = 'P'

DECLARE @sqlstr varchar(200), @s char(1)
/*
Значения @objtype
C  = 'CHECK' 
D  = 'Default' 
F  = 'FOREIGN KEY' 
L  = 'Log' 
FN = 'Scalar function' 
IF = 'Inlined table-function' 
P  = 'Stored procedure' 
PK = 'PRIMARY KEY' 
RF = 'Replication filter stored procedure' 
S  = 'System table' 
TF = 'Table function' 
TR = 'Trigger' 
U  = 'User table' 
UQ = 'UNIQUE constraint' 
V  = 'View' 
X  = 'Extended stored procedure' 

Вставляйте специальные символы (wildcards), если не требуется точный поиск.
Set @objname = '%' + @objname + '%' -- Лучше определять пользовательские специальные символы (custom wildcards) для входного параметра @objname
*/
-- Удаление временной таблицы, если она существует
IF OBJECT_ID('tempdb..#tblDBObjects') IS NOT NULL
	DROP TABLE #tblDBObjects
-- Создание временной таблицы
CREATE TABLE #tblDBObjects (
	dbName sysname,
	objName sysname,
	objtype char(2)
	)

-- Если параметр @objname не передан, то результат все равно должен быть возвращен
SET @objname = ISNULL(@objname, '%')
-- Если @objtype не в числе допустимых, то выведем все
IF NOT UPPER(ISNULL(@objtype,'%')) IN('C','D','F','L','FN','IF','P','PK','RF','S','TF','TR','U','UQ','V','X')
	SET @objtype = '%'

SELECT @sqlstr = '
USE [?]
INSERT #tblDBObjects
	SELECT db_name() AS DBName, name, xtype
		FROM [?].sys.sysobjects
		WHERE xtype LIKE ''' + @objtype + '''
			AND name LIKE ''' + @objname + ''''

EXEC master.sys.sp_MSforeachdb @command1 = @sqlstr

SELECT * FROM #tblDBObjects
2 авг 18, 16:48    [21625549]     Ответить | Цитировать Сообщить модератору
 Re: Поиск объекта на серверах по имени  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
AndrF,

а что мне сделать что бы увидеть вопросики в имени ?
2 авг 18, 16:50    [21625562]     Ответить | Цитировать Сообщить модератору
 Re: Поиск объекта на серверах по имени  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
автор
А вот так скрипт работать стал побыстрей (для пары серверов не столь важно, а на сотне-другой серверов заметно):

при этом мы упортно обходим все базы...
2 авг 18, 16:51    [21625569]     Ответить | Цитировать Сообщить модератору
 Re: Поиск объекта на серверах по имени  [new]
AndrF
Member

Откуда:
Сообщений: 2183
TaPaK
при этом мы упортно обходим все базы...


Наверное потому что искать нужно во всех базах. Не нравится - с удовольствием гляну ваш вариант, если он есть, конечно.
6 авг 18, 16:27    [21631777]     Ответить | Цитировать Сообщить модератору
 Re: Поиск объекта на серверах по имени  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
AndrF
TaPaK
при этом мы упортно обходим все базы...


Наверное потому что искать нужно во всех базах. Не нравится - с удовольствием гляну ваш вариант, если он есть, конечно.

особенно в msdb ну и остальных системных
6 авг 18, 16:38    [21631793]     Ответить | Цитировать Сообщить модератору
 Re: Поиск объекта на серверах по имени  [new]
AndrF
Member

Откуда:
Сообщений: 2183
TaPaK
особенно в msdb ну и остальных системных


Какие проблемы - ищет.
7 авг 18, 12:25    [21632725]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить