2013-05-15 2 views
0

Я немного смущен оператором обновления, но вот что у меня есть: у меня эти два сотрудника и их соответствующие буквенные числовые коды.Является ли табличная функция обновляемой

select * from cm.bo.hotlist('08Z') 
where State = 'ca' 

select * from cm.bo.hotlist('06D') 
where State = 'ca' 

В таблице есть некоторые города, связанные с каждым работником, верхний оператор выбора имеет этот список городов, связанные с «08Z» ... скажем.

New York 
Chicago 

Я хотел бы переместить эти города к сотруднику «06D»

Как бы я получил об обновлении?

Сбивая с толку часть для меня - это таблица-значная функция.

Любая помощь была бы принята с благодарностью. Спасибо.

может быть что-то вроде этого:

update CITY cm.bo.hotlist('06D') 

where CITY in (New York, Chicago) 
+0

Вы должны смотреть на на table_valued finction найти основной таблицу, а затем напишите обновление для этого. Вы не можете обновить табличную функцию. Это постоянная переменная, которая, однако, изменится, если вы хотите временно изменить разные данные временно, тогда вы сделаете что-то другое. – HLGEM

+2

Где люди думают, что вы не можете обновить TVF? Он возвращает ссылку на таблицу, если эта ссылка является обновляемой, она работает нормально. –

ответ

4

Так что вы хотите:

Update cm.bo.hotlist('08Z') 
set 
<EmployeeID Column> = '06D' 
where 
city in ('New York', 'Chicago') 

Для всех, кто приходит сюда, да, рядный функция табличного значения изменяемый в поскольку базовый набор данных обновляется. Образец кода:

IF EXISTS(select * from sys.objects where name = 'test' and schema_id = schema_id('dbo')) BEGIN DROP TABLE dbo.test; END 

CREATE TABLE dbo.test(Employee varchar(10), city varchar(10)); 

CREATE FUNCTION [dbo].[getEmployeeCities] (@employee varchar(10) RETURNS TABLE AS 
RETURN ( SELECT * from test where employee = @employee); 

insert into dbo.test select 'A', 'Chicago'; 
insert into dbo.test select 'B', 'New York'; 

select * from dbo.test; 

update dbo.getEmployeeCities('A') 
set Employee = 'B' 
where city = 'Chicago'; 

select * from dbo.test; 
+0

поле для сотрудника - employee_id, похоже, что я был достаточно близок к знанию и благодарю за ответ, я отдам его. Есть ли что-нибудь еще, что я должен знать? –

0

Update TABLENAME SET Employés = '06D' где ГОРОД В ('Нью-Йорк', 'Чикаго')

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