Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск объекта на серверах по имени / 10 сообщений из 10, страница 1 из 1
02.08.2018, 14:21
    #39682594
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск объекта на серверах по имени
Для поиска объекта на серверах по имени пытаюсь задействовать процедуру описанную по данной ссылке .

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

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

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

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

Или кто знает другой способ реализации поиска объектов, применимых на серверах начиная с версии SQL 2005?
...
Рейтинг: 0 / 0
02.08.2018, 15:44
    #39682655
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск объекта на серверах по имени
AndrF,
используете NVARCHAR
...
Рейтинг: 0 / 0
02.08.2018, 16:18
    #39682687
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск объекта на серверах по имени
iiyamaиспользуете NVARCHAR

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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
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, но это пока влом ибо в данный момент не нужно по работе.
...
Рейтинг: 0 / 0
02.08.2018, 16:33
    #39682695
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск объекта на серверах по имени
AndrF,
автор без вопросиков в имени базы это настолько глупо, что даже мило
...
Рейтинг: 0 / 0
02.08.2018, 16:48
    #39682710
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск объекта на серверах по имени
TaPaKAndrF,
автор без вопросиков в имени базы это настолько глупо, что даже мило

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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
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
...
Рейтинг: 0 / 0
02.08.2018, 16:50
    #39682714
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск объекта на серверах по имени
AndrF,

а что мне сделать что бы увидеть вопросики в имени ?
...
Рейтинг: 0 / 0
02.08.2018, 16:51
    #39682716
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск объекта на серверах по имени
авторА вот так скрипт работать стал побыстрей (для пары серверов не столь важно, а на сотне-другой серверов заметно):
при этом мы упортно обходим все базы...
...
Рейтинг: 0 / 0
06.08.2018, 16:27
    #39683817
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск объекта на серверах по имени
TaPaKпри этом мы упортно обходим все базы...

Наверное потому что искать нужно во всех базах. Не нравится - с удовольствием гляну ваш вариант, если он есть, конечно.
...
Рейтинг: 0 / 0
06.08.2018, 16:38
    #39683825
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск объекта на серверах по имени
AndrFTaPaKпри этом мы упортно обходим все базы...

Наверное потому что искать нужно во всех базах. Не нравится - с удовольствием гляну ваш вариант, если он есть, конечно.
особенно в msdb ну и остальных системных
...
Рейтинг: 0 / 0
07.08.2018, 12:25
    #39684182
AndrF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск объекта на серверах по имени
TaPaKособенно в msdb ну и остальных системных

Какие проблемы - ищет.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск объекта на серверах по имени / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]