Выбор пользовательской скалярной функции, которая принимает в качестве параметра другое поле - PullRequest
1 голос
/ 27 марта 2010

У меня есть таблица a со списком идентификаторов и пользовательская функция foo(id), которая принимает идентификатор и возвращает VARCHAR(20).

Я пытаюсь сделать следующее:

SELECT 
id,
foo(id) AS 'text field'
FROM a

Однако вместо вызова функции для каждого идентификационного номера, как я и хотел, текст возвращается одинаковым для каждой строки. Я проверил функцию foo () вручную с возвращенными идентификаторами, и у нее нет этой проблемы, поэтому я понимаю, что не должен что-то понимать в оценке запроса.

Ответы [ 2 ]

1 голос
/ 27 марта 2010

Если выход функции функционально зависит от входа, то он будет вызываться для каждой строки, как вы ожидаете. Если вы видите другой результат, это означает, что вы не передали правильный ввод, или ваш вывод функции не зависит от его ввода.

1 голос
/ 27 марта 2010

Это сработало для меня. Я не уверен, что ты говоришь.

CREATE TABLE [dbo].[a](
 [id] [int] NULL
) 

insert into a select 1
insert into a select 2

insert into a select 4
insert into a select 5

CREATE FUNCTION foo(@id int) RETURNS varchar(20)
AS
BEGIN
 DECLARE @ResultVar varchar(20)
 SELECT @ResultVar = '# - ' + CAST(@id as varchar(20))
 RETURN @ResultVar
END

select id, dbo.foo(id) AS 'text field' from a

возвращает

id          text field
----------- --------------------
1           # - 1
2           # - 2
4           # - 4
5           # - 5
6           # - 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...