2013-10-09 2 views
-1

Я хочу создать функцию значения таблицы. Эта функция будет иметь 3 аргумента. Каждый из столбцов возвращенных таблиц будет заполнен оператором SELECT. Каждый оператор SELECT будет использовать один из параметров функции в своем предложении WHERE.Таблица Значение Функции и параметры

Вот функция:

CREATE FUNCTION getChangeTypes(@add_name varchar(20),@change_name varchar(20), @remove_name varchar(20)) 
RETURNS @changeTypes TABLE (
    addd  varchar(20), 
    change varchar(20), 
    remove varchar(20) 
) 
AS 
BEGIN 

UPDATE @changeTypes 
    SET addd = CAST ((SELECT change_type_id FROM db_comp_change_types WHERE  change_type_name = ''[email protected]_name+'') AS varchar(20)) 

UPDATE @changeTypes 
SET change = CAST ((SELECT change_type_id FROM db_comp_change_types WHERE change_type_name = ''[email protected]_name+'') AS varchar(20)) 

UPDATE @changeTypes 
SET remove = CAST ((SELECT change_type_id FROM db_comp_change_types WHERE change_type_name = ''[email protected]_name+'') AS varchar(20)) 

RETURN; 
END; 
GO 

А вот вызов функции:

select * from getChangeTypes('Added Column Size','Changed Column Size','Removed Column Size') 

Я понимаю, что ГДЕ правильно не работает из-за того, как я с помощью функции параметры. Может кто-нибудь предложить способ, который я могу правильно включить параметры функции в предложение WHERE?

Большое спасибо.

+1

Вам нужно сначала «ВСТАВИТЬ» запись перед тем, как «ОБНОВИТЬ» ее. –

ответ

0

Вы не муз обновить @changeTypes, но вам придется вставить в него

возможно как это:

CREATE FUNCTION getChangeTypes(@add_name varchar(20),@change_name varchar(20), @remove_name varchar(20)) 
RETURNS @changeTypes TABLE (
    addd  varchar(20), 
    change varchar(20), 
    remove varchar(20) 
) 
AS 
BEGIN 

insert into @changeTypes(addd,change,remove) values(null,null,null) 

UPDATE @changeTypes 
    SET addd = CAST ((SELECT change_type_id FROM db_comp_change_types WHERE  change_type_name = ''[email protected]_name+'') AS varchar(20)) 

UPDATE @changeTypes 
SET change = CAST ((SELECT change_type_id FROM db_comp_change_types WHERE change_type_name = ''[email protected]_name+'') AS varchar(20)) 

UPDATE @changeTypes 
SET remove = CAST ((SELECT change_type_id FROM db_comp_change_types WHERE change_type_name = ''[email protected]_name+'') AS varchar(20)) 

RETURN; 
END; 
GO 
+0

Хорошо, ваше предложение сработало. Но я не понимаю синтаксис {'' + @ add_name + ''}, почему бы не {'' @add_name ''} работать? Почему знаки +? – user2135970

0

Tf есть несколько значений в подзапросе, то это вызовет ошибку

CREATE FUNCTION getChangeTypes(@add_name varchar(20),@change_name varchar(20), @remove_name varchar(20)) 
RETURNS @changeTypes TABLE (
    addd  varchar(20), 
    change varchar(20), 
    remove varchar(20) 
) 
AS 
BEGIN 

declare @db_comp_change_types Table (change_type_id int, change_type_name varchar(100)) 
Insert Into @db_comp_change_types 
Select 1, 'Add' UNION 
Select 2, 'Add' UNION 
Select 3, 'Remove' UNION 
Select 4, 'Change' 

insert into @changeTypes 
(addd,change,remove) 
values(null,null,null) 

UPDATE @changeTypes 
    SET addd = CAST ((SELECT TOP 1 change_type_id FROM @db_comp_change_types WHERE  change_type_name = @add_name) AS varchar(20)) 

UPDATE @changeTypes 
SET change = CAST ((SELECT TOP 1 change_type_id FROM @db_comp_change_types WHERE change_type_name = @change_name) AS varchar(20)) 

UPDATE @changeTypes 
SET remove = CAST ((SELECT TOP 1 change_type_id FROM @db_comp_change_types WHERE change_type_name = @remove_name) AS varchar(20)) 

RETURN; 
END 
GO 

Я только что заменил таблицу переменной таблицы. Надеюсь, это поможет.

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