Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический запрос / 5 сообщений из 5, страница 1 из 1
18.12.2019, 12:10
    #39904612
SHKoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический запрос
делаю запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
select 
REVERSE(STUFF(REVERSE((
select 
o.name +', '
from MyServer.MyDB_OA.sys.objects o
 FOR XML PATH('')
 )),1,1,''))



Через DBLink

Получаю список таблиц. В дальнейшем этот список будет анализировать на различия со списком таблиц на других серверах. В последствии и поля, типы, размерность полей.
Но сейчас вопрос простой.

Как сделать такой запрос динамическим, чтобы я мог динамически подсовывать DBLink'и и выполнять этот запрос для различных серверов. И даже на локальном.

Есть таблица DBLink'ов, по которой курсором пройдусь и выявлю расхождения. О чем необходимо в последствии сигнализировать.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @sql varchar(max)

set @sql = '
select 
REVERSE(STUFF(REVERSE((
select 
o.name +'', ''
from '+@DBLink+'.sys.objects o
 FOR XML PATH('''')
 )),1,1,''''))
 '


exec @sql



Как мне получить в переменную результат запроса?
Спасибо
...
Рейтинг: 0 / 0
18.12.2019, 12:44
    #39904646
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический запрос
SHKoder,

sp_executesql
...
Рейтинг: 0 / 0
18.12.2019, 12:51
    #39904654
SHKoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический запрос
court,

получилось, спасибо
...
Рейтинг: 0 / 0
18.12.2019, 13:58
    #39904767
SHKoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический запрос
Столкнулся с другой проблемой

скрипт:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
declare @result varchar(max), @oResult varchar(max)
declare @sql nvarchar(max)
declare @ParmDefinition nvarchar(500) = N'@result varchar(max) OUTPUT' 
declare @dblink varchar(32) = 'MyServer.MyDB'

set @sql = ' 
select @result =
REVERSE(STUFF(REVERSE((
select 
o.name +'', ''
from '+@DBLink+'.sys.objects o
 FOR XML PATH('''')
 )),1,1,''''))
'

 EXECUTE sp_executesql @sql, @ParmDefinition, @Result=@oresult OUTPUT;

 select @oresult



вполне работает корректно

Но стоит этот скрипт обернуть в процедуру
Код: 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.
alter procedure  sp_test( @OutParam nvarchar(max) output)
as
begin

declare @result varchar(max), @oResult varchar(max)
declare @sql nvarchar(max)
declare @ParmDefinition nvarchar(500) = N'@result varchar(max) OUTPUT' 
declare @dblink varchar(32) = 'GANIMED.USK_SHKREBA_OA'

set @sql = ' 
select @result =
REVERSE(STUFF(REVERSE((
select 
o.name +'', ''
from '+@DBLink+'.sys.objects o
 FOR XML PATH('''')
 )),1,1,''''))
'

 EXECUTE sp_executesql @sql, @ParmDefinition, @Result=@oresult OUTPUT;

 select @OutParam = @oresult

end



и я ничего не получаю

Код: sql
1.
2.
3.
declare @o varchar(max)
exec dbo.sp_test  @o 
select @o



Что за черт? Ведь вне процедуры переменная @oresult имеет значения
А вызов моего запроса процедурой и переменная @o пустая...

Выручайте знатоки.
Спасибо
...
Рейтинг: 0 / 0
18.12.2019, 14:02
    #39904772
SHKoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический запрос
я балбес
Код: sql
1.
2.
3.
declare @o varchar(max)
exec dbo.sp_test  @o out
select @o as ff



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


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