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

Откуда: Kiev
Сообщений: 127
Есть не понятный момент.
Создаю ф-ю:
CREATE FUNCTION sp_get_incremented_id(@t_name NVARCHAR(30)) RETURNS char(9)
AS
BEGIN
DECLARE @text NVARCHAR(500)
SET @text = '
DECLARE @n36 char(6)
DECLARE @n36inc char(6)
DECLARE @new_id char(9)
DECLARE @n10 numeric
DECLARE @n10inc numeric
DECLARE @inc numeric

SET @inc = 1

SELECT @n36 = LEFT(MAX(Ссылка),6)
FROM [tp].[dbo].['+@t_name+']



SELECT @n10 = [tp].[dbo].[sp_toint](@n36)

SET @n10inc = @n10 + @inc

SELECT @n36inc = [tp].[dbo].[sp_tohex](@n10inc,6)

SET @new_id = @n36inc + ''MRK''
EXEC @text
RETURN (@new_id)
проблема возникает в том, что @new_id - переменная "описанная" в переменной @text, которая передается на выполнение на EXEC, т.е. "вне" @text, "снаружи" - @new_id не существует, т.е. она не объявленная.
Как можно "передавать" переменные между частью выполняемой через EXEC и без, или существует метод описания переменных с "общим" доступом.
15 сен 05, 18:55    [1882229]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запроса из строковой переменной  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
https://www.sql.ru/faq/faq_topic.aspx?fid=104
Пункт III
15 сен 05, 18:59    [1882241]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запроса из строковой переменной  [new]
Jarad
Member

Откуда: Kiev
Сообщений: 127
Переделал немного. Сделал процедура, которая обрабатывает некоторую забблицу, и возвращает результат:
ALTER PROC sp_get_incremented_id(@t_name NVARCHAR(30),
@output_id char(9) OUTPUT)
AS
BEGIN
DECLARE @new_id char(9)
DECLARE @text NVARCHAR(500)
SET @text = '
DECLARE @n36 char(6)
DECLARE @n36inc char(6)
--DECLARE @new_id char(9)
DECLARE @n10 numeric
DECLARE @n10inc numeric
DECLARE @inc numeric

SET @inc = 1

SELECT @n36 = LEFT(MAX(Ссылка),6)
FROM [tp].[dbo].['+@t_name+']



SELECT @n10 = [tp].[dbo].[sp_toint](@n36)

SET @n10inc = @n10 + @inc

SELECT @n36inc = [tp].[dbo].[sp_tohex](@n10inc,6)

SET @new_id = @n36inc + ''MRK'''

EXEC sp_executesql @text,N'@new_id char(9) out',@new_id = @new_id out
SET @output_id = @new_id
END

Под эту процедуру повожу функцию, которая будет просто возвращать результат процедуры но "в функциональном виде", "на себя":
CREATE FUNCTION f_get_id(@t_name NVARCHAR(30)) RETURNS char(9)
AS
BEGIN
DECLARE @RC int
DECLARE @output_id char(9)
EXEC @RC = [dbo].[sp_get_incremented_id] @t_name, @output_id OUTPUT
RETURN @output_id
END
Теперь, думал, что смогу этой функцией воспользоваться как например любой стандартной (MAX, MIN) в теле SELECT, пишу:
SELECT [tp].[dbo].f_get_id('my_table')
и сразу же віскакиевает ошибка:
Only functions and extended stored procedures can be executed from within a function.
Т.е. создать такую ф-ю которая будет выполнять какие-либо действия (что сделано через процедуру) и возвращать результат в "себя", невозможно?
16 сен 05, 11:50    [1883736]     Ответить | Цитировать Сообщить модератору
 Re: Выполнение запроса из строковой переменной  [new]
Glory
Member

Откуда:
Сообщений: 104760
Т.е. создать такую ф-ю которая будет выполнять какие-либо действия (что сделано через процедуру) и возвращать результат в "себя", невозможно?

Невозможно в UDF вызывать ничего кроме UDF или extended stored procedures.
А вы пытаетесь использовать EXEC sp_executesql
16 сен 05, 11:53    [1883766]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить