选择用户定义的标量函数,该函数将另一个字段作为参数

时间:2010-03-26 22:48:03

标签: sql sql-server tsql

我有一个表a,其中包含一个id列表,以及一个用户定义的函数foo(id),它接受​​id并返回VARCHAR(20)

我想做的是:

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

然而,不是像我想要的那样为每个ID号调用函数,而是每行都返回相同的文本。我已经使用返回的ID手动测试了foo()函数,并且它没有那个问题,所以我意识到我不能理解查询的评估。

2 个答案:

答案 0 :(得分:1)

这对我有用。我不确定你说的是什么。

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

答案 1 :(得分:1)

如果函数的输出在功能上依赖于输入,那么将按照您的预期为每一行调用它。如果您看到不同的结果,则表示您没有传递正确的输入,或者您的功能输出不依赖于其输入。