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

Откуда: Moscow city
Сообщений: 616
делаю запрос

select 
REVERSE(STUFF(REVERSE((
select 
o.name +', '
from MyServer.MyDB_OA.sys.objects o
 FOR XML PATH('')
 )),1,1,''))


Через DBLink

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

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

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

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



Как мне получить в переменную результат запроса?
Спасибо
18 дек 19, 12:10    [22042937]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
court
Member

Откуда:
Сообщений: 1985
SHKoder,

sp_executesql
18 дек 19, 12:44    [22042982]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
court,

получилось, спасибо
18 дек 19, 12:51    [22042991]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
Столкнулся с другой проблемой

скрипт:
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


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

Но стоит этот скрипт обернуть в процедуру
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


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

declare @o varchar(max)
exec dbo.sp_test  @o 
select @o


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

Выручайте знатоки.
Спасибо
18 дек 19, 13:58    [22043144]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
SHKoder
Member

Откуда: Moscow city
Сообщений: 616
я балбес
declare @o varchar(max)
exec dbo.sp_test  @o out
select @o as ff


спасибо. нашел в чем дело
18 дек 19, 14:02    [22043149]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить