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

Откуда:
Сообщений: 116
Написал именно то, что мне надо, т.е. нужна именно функция, возвращающая результат выполнения динамического SQL.
Мой код:
USE BASE1
	DECLARE @BASE_EXPORT nVARchar(15) = 'BASE1'
	DECLARE @TABLE_EXPORT nVARchar(15) = 'TESTTABLE'
	
	DECLARE @DINAMIC_SQL VARCHAR(1000) = 'SELECT TOP 1 PARENT._IDRRef FROM '+ @BASE_EXPORT+'.DBO.'+@TABLE_EXPORT +' PARENT'
	DECLARE @PARENT_ID BINARY(16)	
	SET @PARENT_ID = EXECUTE(@DINAMIC_SQL)


Но я-то и сам понимаю, что SET @PARENT_ID = EXECUTE(@DINAMIC_SQL) это непрвильно и не работает. В этом- то и вопрос: как сделать такое присваивание?
26 ноя 13, 01:02    [15188732]     Ответить | Цитировать Сообщить модератору
 Re: Как загнать в переменную результат выполнения динамического запроса?  [new]
sdet
Member

Откуда:
Сообщений: 463
okwell5
Написал именно то, что мне надо, т.е. нужна именно функция, возвращающая результат выполнения динамического SQL.
Мой код:
USE BASE1
	DECLARE @BASE_EXPORT nVARchar(15) = 'BASE1'
	DECLARE @TABLE_EXPORT nVARchar(15) = 'TESTTABLE'
	
	DECLARE @DINAMIC_SQL VARCHAR(1000) = 'SELECT TOP 1 PARENT._IDRRef FROM '+ @BASE_EXPORT+'.DBO.'+@TABLE_EXPORT +' PARENT'
	DECLARE @PARENT_ID BINARY(16)	
	SET @PARENT_ID = EXECUTE(@DINAMIC_SQL)


Но я-то и сам понимаю, что SET @PARENT_ID = EXECUTE(@DINAMIC_SQL) это непрвильно и не работает. В этом- то и вопрос: как сделать такое присваивание?

sp_executesql,
или поместить в таблицу и забрать
insert into @myTable exec
26 ноя 13, 01:25    [15188758]     Ответить | Цитировать Сообщить модератору
 Re: Как загнать в переменную результат выполнения динамического запроса?  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
okwell5,

насколько я знаю можно insert exec в таблицу сделать
причем у меня только в # получилось, в табличную переменную не захотело
в простую переменную вроде нельзя
26 ноя 13, 01:28    [15188765]     Ответить | Цитировать Сообщить модератору
 Re: Как загнать в переменную результат выполнения динамического запроса?  [new]
okwell5
Member

Откуда:
Сообщений: 116
USE BASE2
	DECLARE @BASE_EXPORT nVARchar(15) = 'BASE1'
	DECLARE @TABLE_EXPORT nVARchar(15) = 'TESTTABLE'
	
	DECLARE @DINAMIC_SQL VARCHAR(1000) = '@PARENT_ID_IN BINARY(16) SET @PARENT_ID_IN = (SELECT TOP 1 PARENT._IDRRef FROM '+ @BASE_EXPORT+'.DBO.'+@TABLE_EXPORT +' PARENT)'
	DECLARE @PARENT_ID BINARY(16)
	
	
	EXECUTE SP_EXECUTESQL @DINAMIC_SQL, @PARENT_ID_IN=@PARENT_ID OUTPUT;
	SELECT  @PARENT_ID

Пишет:
Сообщение 214, уровень 16, состояние 2, процедура sp_executesql, строка 1
Процедура ожидает параметр "@statement" типа "ntext/nchar/nvarchar".

Что опять не так? Как правильно? Нужна помощь по синтаксису.
26 ноя 13, 01:49    [15188780]     Ответить | Цитировать Сообщить модератору
 Re: Как загнать в переменную результат выполнения динамического запроса?  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
DECLARE @DINAMIC_SQL NVARCHAR(1000)
26 ноя 13, 01:52    [15188781]     Ответить | Цитировать Сообщить модератору
 Re: Как загнать в переменную результат выполнения динамического запроса?  [new]
okwell5
Member

Откуда:
Сообщений: 116
locky,
USE BASE2
	DECLARE @BASE_EXPORT nVARchar(15) = 'BASE1'
	DECLARE @TABLE_EXPORT nVARchar(15) = 'TESTTABLE'	
	DECLARE @DINAMIC_SQL NVARCHAR(1000) = 'DECLARE @PARENT_ID_IN BINARY(16) SET @PARENT_ID_IN = (SELECT TOP 1 PARENT._IDRRef FROM '+ @BASE_EXPORT+'.DBO.'+@TABLE_EXPORT +' PARENT)'
	select @DINAMIC_SQL
	DECLARE @PARENT_ID BINARY(16) 	
	EXECUTE SP_EXECUTESQL @DINAMIC_SQL, @PARENT_ID_IN=@PARENT_ID OUTPUT;
	SELECT  @PARENT_ID

(строк обработано: 1)
Сообщение 214, уровень 16, состояние 3, процедура sp_executesql, строка 1
Процедура ожидает параметр "@parameters" типа "ntext/nchar/nvarchar".

Нет же параметров, что же еще?
26 ноя 13, 02:05    [15188793]     Ответить | Цитировать Сообщить модератору
 Re: Как загнать в переменную результат выполнения динамического запроса?  [new]
sdet
Member

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

N'@PARENT_ID BINARY(16)'
26 ноя 13, 02:13    [15188801]     Ответить | Цитировать Сообщить модератору
 Re: Как загнать в переменную результат выполнения динамического запроса?  [new]
qwerty112
Guest
	DECLARE @BASE_EXPORT nVARchar(15) = 'BASE1'
	DECLARE @TABLE_EXPORT nVARchar(15) = 'TESTTABLE'	
	DECLARE @DINAMIC_SQL NVARCHAR(1000) = 'SElecT top 1 @PARENT_ID_IN=PARENT._IDRRef FROM '+ @BASE_EXPORT+'.DBO.'+@TABLE_EXPORT +' PARENT)'
declare @params nvarchar(max)
set @params='@PARENT_ID_IN BINARY(16) output'

	select @DINAMIC_SQL
	DECLARE @PARENT_ID BINARY(16) 	
	EXECUTE SP_EXECUTESQL @DINAMIC_SQL, @params, @PARENT_ID_IN=@PARENT_ID OUTPUT;
	SELECT  @PARENT_ID
26 ноя 13, 02:18    [15188808]     Ответить | Цитировать Сообщить модератору
 Re: Как загнать в переменную результат выполнения динамического запроса?  [new]
okwell5
Member

Откуда:
Сообщений: 116
qwerty112, Работает! Спасибо!
26 ноя 13, 06:49    [15188963]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить