2014-01-07 138 views
0

我已计算不同数据的SQL函数,它看起来是这样的:传递SQL函数参数

Declare @parameter1 float, @parameter2 float, @parameter3 float, @parameter4 float 

SET @parameter1 = 3 
SET @parameter1 = 5 
SET @parameter1 = 7 
SET @parameter1 = 9 

dbo.SqlFuntion(@parameter1, @parameter2, @parameter3, @parameter4) 

现在,这工作得很好,我的挑战是,我想从检索到的我的参数数据库表而不是手动声明它们。

所以,我想是这样的:

Select name, age, postal, weight from TableValues where ID = 1234 

dbo.SqlFuntion(name, age, postal, weight) 

谁能告诉我怎么可以做到这一点,没有宣布什么?

+0

为什么不只是传递ID的功能,并把查询在里面? – Rachcha

+0

没有声明任何东西,这将是艰难的,如果你坚持不声明变量,你需要将值选择逻辑放入函数本身;尽管很可能你需要在那里声明变量 - 但这主要取决于你在函数中对这些值做了什么 – DrCopyPaste

回答

2

你可以这样说:

Declare @parameter1 float, @parameter2 float, @parameter3 float, @parameter4 float 

Select @parameter1 = name, @parameter2 = age, @parameter3 = postal, @parameter4 = weight 
from TableValues where ID = 1234 

dbo.SqlFuntion(@parameter1, @parameter2, @parameter3, @parameter4) 
+0

你仍然在声明:P – Rachcha

+1

@Rachcha如果你想传递参数给你的函数你需要先申报;原始问题中的语法存在缺陷 - 此答案显示了如何通过查询将值分配给变量;如果你不想声明额外的变量,你需要让你的函数直接与该表进行交互(即执行一个非常类似的选择来检索值) – DrCopyPaste

+0

感谢队友!,我会试试这个,并回到你很快! – MishMish

1

//你能做到使用游标,它能帮助你

DECLARE v_done INT DEFAULT FALSE; 
DECLARE v_name VARCHAR(50); 
DECLARE v_age DOUBLE; 
DECLARE v_postal VARCHAR(10); 
DECLARE v_weight DOUBLE; 

DECLARE cur1_cursor CURSOR FOR SELECT name, age, postal, weight from TableValues where ID = 1234 ; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; 

OPEN cur1_cursor; 
    read_loop: LOOP 

     FETCH cur1_cursor INTO v_name,v_age,v_postal,v_weight; 

     IF v_done THEN 
      LEAVE read_loop; 
     END IF; 

     SET @v_name = v_name; 
     SET @v_age = v_age; 
     SET @v_postal = v_postal; 
     SET @v_weight = v_weight; 

     dbo.SqlFuntion(@v_name, @v_age, @v_postal, @v_weight); 

END LOOP; 
+0

用游标来做这件事只不过是将一个简单的'SELECT @parameter = column FROM TABLE'搞混了,除此之外还有什么好处呢? xD – DrCopyPaste

+0

它取决于需求和您的选择,它只是另一种方式来做到这一点。 – Dharmraj

+0

非常感谢,我会尝试你的榜样,我会回复你的反馈! – MishMish