将参数从存储过程传递到函数(在存储过程内)

use*_*605 2 sql sql-server parameters stored-procedures function

我有一个问题,我已经研究Stackoverflow没有任何运气的答案.我已经设法构建一个使用名为GetSubtree_relvalue的函数的存储过程.当函数的参数硬编码时,存储过程及其功能正常工作.但是现在我希望函数固有在执行时使用存储过程发送的参数.

当我用@attribute_id替换XX和USA和使用@Client替换USA时,它不会返回任何内容.到目前为止我调试了它,以便我可以断定该函数在运行时没有得到任何值.即使存储过程中的这些参数与我硬编码的值完全相同,也是如此.(我在程序中选择了常规选择@client并返回美国.)

我是否错误地参数化了这个函数?我是否需要启动函数参数才能将其发送/传递给函数?如何获取函数到inhere参数?

关于将参数从SP传递到函数的所有输入,我会很高兴.

使用SQL Server 2008

谢谢

/丹尼尔


功能值硬编码

Insert into att_value_lookup (t.attribute_ID, t.att_value)
Select
t.attribute_ID, t.att_value 
From
(Select attribute_id, att_value from relvalue
where attribute_id in (
            Select attribute_id from (
                        select attribute_id 
                        from dbo.GetSubtree_relvalue('XX','USA'))
 ) as t
Run Code Online (Sandbox Code Playgroud)

函数值已参数化

Insert into att_value_lookup (t.attribute_ID, t.att_value)
Select
t.attribute_ID, t.att_value 
From
(Select attribute_id, att_value from relvalue
where attribute_id in (
            Select attribute_id from (
                        select attribute_id 
                        from dbo.GetSubtree_relvalue('@attribute_id','@client'))
 ) as t
Run Code Online (Sandbox Code Playgroud)

KM.*_*KM. 5

删除引号!!

dbo.GetSubtree_relvalue('@attribute_id','@client')
Run Code Online (Sandbox Code Playgroud)

应该:

dbo.GetSubtree_relvalue(@attribute_id,@client)
Run Code Online (Sandbox Code Playgroud)

你传递像'XX'和'USA'这样的文字字符串值时只需要它们,而不是在传递变量时.您实际上是在传递包含变量名称的字符串:'@ attribute_id','@ client'而不是变量中包含的值.

你可以看看:

DECLARE @x varchar(10)
SET @x='wow wee!!'
print '@x'
print @x
Run Code Online (Sandbox Code Playgroud)