2014-01-07 7 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

Почему не просто передать идентификатор функции и поставить запрос внутри него? – 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

Спасибо, ответьте !, Я попробую это и вернусь к u скоро! – 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

Смежные вопросы