2017-02-22 7 views
0

Я хочу спросить об обновлении запроса для SQL Server 2008.Обновление таблицы более 1 строки

Я хочу, чтобы обновить таблицу с более чем 1 строку с запросом, как это.

update #temp_cost 
set acct_cd = (
    select acc_no from acc_gltrans 
    where voucher like 'SCS/GR%' 
    and debit_credit > 0 
) 
where grn_no = (
    select voucher from acc_gltrans 
    where voucher like 'SCS/GR%' 
    and debit_credit > 0 
); 

Но получил ошибку как этот

подзапрос возвращает более чем на 1 значение. Это недопустимо, когда подзапрос следует =,! =, <, < =,>,> = или когда подзапрос используется как выражение.

Я надеюсь, что кто-то может помочь мне это исправить, Благодаря

+1

Я не эксперт, но, видимо, один из вашего подзапрос возвращает более чем на 1 значение. Вы не можете установить значение 'acct_cd' в несколько значений. –

+1

Вы можете использовать оператор IN вместо оператора =, если вы хотите обновить более одной строки на сервере sql. –

ответ

0

вы пытаетесь присвоить одно значение с N-Значения, возвращаемые из вашего подзапроса -

acct_cd = 
(select acc_no from acc_gltrans where voucher like 'SCS/GR%' 
and debit_credit > 0) 

В суб -query вы выбираете более одного acc_no от acc_gltrans,

select acc_no from acc_gltrans where voucher like 'SCS/GR%' 
and debit_credit > 0 

Если вы просто запустить подзапрос и он возвращает только один ряд, то вы можете использовать TOP (1)

select TOP (1) acc_no from acc_gltrans where voucher like 'SCS/GR%' 
and debit_credit > 0 

Но если ваш подзапрос возвращает более одной строки - я предлагаю вам пересмотреть свою логику

Также вы пытаетесь обновить несколько строк в #temp_cost - так что вместо = используйте оператор IN.

Оператор IN позволит обновить более одной строки в таблице #temp_cost

так что ваш запрос будет что-то вроде следующего.

update #temp_cost set 
acct_cd = 
    (select TOP (1) acc_no from acc_gltrans where voucher like 'SCS/GR%' 
     and debit_credit > 0) 
where 
    -- HERE USE IN 
    grn_no IN 
     (select voucher from acc_gltrans where voucher like 'SCS/GR%' 
     and debit_credit > 0) 
+0

umm, потому что я хочу обновить каждую строку с разными данными , например, в #temp_cost есть 2 grn_no с 0 acct_cd , но в acc_gltrans есть 2 grn_no с 2 acc_no Я хочу обновить это 0 acct _no с 2 accno от acc_gltrans table –

+0

его как vlookup в excel, что я хочу сделать это проверка grn_no от #temp_cost и ваучер от acc_gltrans, если grn_no и ваучер соответствуют, а затем обновить acct_cd из #temp_cost с acc_no от acc_gltrans –

0

Вот с помощью этой

UPDATE #temp_cost As temp set 
    temp.acct_cd = A.acc_no 
FROM acc_gltrans as A 
WHERE A.voucher like 'SCS/GR%' AND A.debit_credit > 0) 

Надежда помощь