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

Откуда:
Сообщений: 28
Добрый день!
Необходимо результат селекта выполняемый через EXEC присвоить переменной.
Пробую через INSERT (вроде нормально, устраивает) во временную таблицу, видимо возможно также и через функцию.
А есть ещё варианты? Что-то в этом направлении:

set @result = exec sp_executesql @mysql

Спасибо!
23 янв 19, 11:08    [21791900]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Максим_78,

OUT | OUTPUT
Indicates that the parameter is an output parameter. Use OUTPUT parameters to return values to the caller of the procedure. text, ntext, and image parameters cannot be used as OUTPUT parameters, unless the procedure is a CLR procedure. An output parameter can be a cursor placeholder, unless the procedure is a CLR procedure. A table-value data type cannot be specified as an OUTPUT parameter of a procedure
23 янв 19, 11:12    [21791908]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
Максим_78
Member

Откуда:
Сообщений: 28
Читаю, но что-то не могу разобраться, какие параметры необходимо передавать в EXEC.
Можно пример на пальцах?
Скажем:

declare
@result nvarchar(max),
@mysql nvarchar(max)
set @mysql = N'
Select @MyColumn
From @MyTable
Where ID = 1
'
EXECUTE sp_executesql @mysql .......
23 янв 19, 12:43    [21791980]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30726
Максим_78
Можно пример на пальцах?
В хелпе же есть пример, скопируйте его, и меняйте на свои переменные.
23 янв 19, 12:57    [21792006]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
Максим_78
Member

Откуда:
Сообщений: 28
Господа, только сильно не пинайте пожалуйста.
Ну не заносятся у меня данные в результирующую переменную, только запрос выполняется, а нужно наоборот.

DECLARE
@SQLString nvarchar(400),
@TableName nvarchar(1000),
@Result nvarchar(max),
@ColumnName nvarchar(100)

set @ColumnName = N'[Парал. согл. - 2]'
set @TableName = N'list_dms_contracts_fos__WSSC_AgreementMatrix_661'

SET @SQLString =
N'Select @ColumnName
From '+quotename(@TableName)+
'Where ID = 3682'

EXECUTE sp_executesql @SQLString, N'@ColumnName nvarchar(100), @TableName nvarchar(1000), @Result nvarchar(max) OUTPUT', @ColumnName, @TableName, @Result OUT

К сообщению приложен файл. Размер - 22Kb
23 янв 19, 14:47    [21792221]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Максим_78,
SET @SQLString = 
N'Select	@Result = ' +@ColumnName + '
From	'+quotename(@TableName)+
'Where	ID = 3682'

ну и @ColumnName, @TableName передавать не понятно зачем
23 янв 19, 14:51    [21792237]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
адаптируйте под себя
DECLARE @DBName varchar(255) 
DECLARE @q varchar(max) 
CREATE table #tempTable(myParam1 int, -- other params)

SET @DBName = 'my_db_name'
SET @q = 'insert into #tempTable exec ['+@DBName+'].[dbo].[my_procedure]'
EXEC(@q)

SELECT * FROM #tempTable
drop table #tempTable
23 янв 19, 14:54    [21792243]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
и вообще мне кажется, что каждый кто начинает писать на sql, сразу начинает с идеи "а не запилить мне универсальную штуку, что бы возвращяла всё что захочу"
23 янв 19, 14:56    [21792249]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
Максим_78
Member

Откуда:
Сообщений: 28
Konst_One,
Да, такой вариант я как раз и использую.
Но хотелось бы с OUTPUT.
23 янв 19, 15:01    [21792263]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
Максим_78
Member

Откуда:
Сообщений: 28
TaPaK,
Так ошибка, если их не передавать: Must declare the scalar variable "@ColumnName".
23 янв 19, 15:02    [21792267]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Максим_78
TaPaK,
Так ошибка, если их не передавать: Must declare the scalar variable "@ColumnName".

ну так убрать и из
@ColumnName nvarchar(100), @TableName nvarchar(1000), @Result nvarchar(max) OUTPUT
23 янв 19, 15:04    [21792271]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
Максим_78
Konst_One,
Да, такой вариант я как раз и использую.
Но хотелось бы с OUTPUT.


у тебя резалтсет - это произвольный набор, никакой OUTPUT тебе тут не поможет
23 янв 19, 15:05    [21792273]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Konst_One
Максим_78
Konst_One,
Да, такой вариант я как раз и использую.
Но хотелось бы с OUTPUT.


у тебя резалтсет - это произвольный набор, никакой OUTPUT тебе тут не поможет

а если ID это PK?
23 янв 19, 15:06    [21792275]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
Konst_One
Member

Откуда:
Сообщений: 11512
частный случай, тогда да.

может тогда ТС нужно для универсальности FOR XML AUTO и тогда можно xml вернуть всегда
23 янв 19, 15:10    [21792282]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
Максим_78
Member

Откуда:
Сообщений: 28
TaPaK
и вообще мне кажется, что каждый кто начинает писать на sql, сразу начинает с идеи "а не запилить мне универсальную штуку, что бы возвращяла всё что захочу"


Это да)))
Ну тут действительно так нужно, правда правда.
23 янв 19, 15:14    [21792289]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть данные в переменную.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Максим_78
TaPaK
и вообще мне кажется, что каждый кто начинает писать на sql, сразу начинает с идеи "а не запилить мне универсальную штуку, что бы возвращяла всё что захочу"


Это да)))
Ну тут действительно так нужно, правда правда.

это нигде не нужно, это просто лень разработчика, которая ни к чему хорошему не ведёт
23 янв 19, 15:19    [21792303]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить