powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Динамический запрос
5 сообщений из 5, страница 1 из 1
Динамический запрос
    #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
Динамический запрос
    #39904646
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SHKoder,

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

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



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


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