2015-06-29 1 views
2

Этот код производит этот результатSelect подзапрос производит результат, но не тогда, когда используется в качестве пункта обновления

SELECT PER.GLACCOUNT, PER.PERIOD,(SELECT GL.[CLOSING_CREDIT] 
    FROM [EMBDATA].[DBO].[_EMB_GL_ACTUALVALUESTYP] AS GL 
    WHERE GL.PERIOD = (DBO.GETMAXPERIOD(PER.GLACCOUNT,PER.PERIOD)) 
    AND GL.ID COLLATE SQL_Latin1_General_CP1_CS_AS =    
    COLLATE SQL_Latin1_General_CP1_CS_AS) AS BALANCE 
    FROM [DBO].[GL_PERIOD_BAL] AS PER 
    WHERE LEFT(PER.GLACCOUNT,4) = 'NM01' AND [BAL.TYPE] = 'R' 
    ORDER BY PER.GLACCOUNT,PER.PERIOD GLACCOUNT PERIOD BALANCE) 

Результат

NM01-4100-0015 2015-12 7081557.0000 
NM01-4100-0016 2015-12 0.0000 
NM01-4100-0017 2015-12 0.0000 
NM01-4100-0018 2015-12 12329577.0000 
NM01-4100-0019 2015-12 1622830124.0000 
NM01-4100-0020 2015-12 0.0000 
NM01-4100-0021 2015-12 23747.0000 
NM01-4100-0022 2015-12 0.0000 
NM01-4100-0023 2015-12 1623014.0000 

Но если я хочу, чтобы объединить его в заявлении, обновление, это ISN» t обновить код .

UPDATE [DBO].[GL_PERIOD_BAL] 
SET [CLOSING_CREDIT] = (SELECT GL.[CLOSING_CREDIT] 
FROM [EMBRACEDATA].[DBO].[_EMB_GL_ACTUALVALUESTYP] GL 
WHERE GL.PERIOD = (DBO.GETMAXPERIOD(GLACCOUNT,PERIOD)) 
AND GL.ID COLLATE SQL_Latin1_General_CP1_CS_AS = 
GLACCOUNT COLLATE SQL_Latin1_General_CP1_CS_AS) 
WHERE LEFT(GLACCOUNT,4) = 'NM01' AND [BAL.TYPE] = 'R' 

ответ

0

При попытке обновления с помощью подзапроса в оракула, если подзапрос возвращает более одной строки, он дает следующее сообщение об ошибке: «однорядные подзапрос возвращает более одной строки»

я думаю так обстоит дело и с вами. Подзапрос не должен возвращать более одной строки для успешного обновления. Вам нужно будет использовать одно из различных предложений, которые помогут ограничить количество строк, взятых на один, что может быть предложением верхнего предела, предложением ограничения и т. Д. Это нужно решить/изменить на основе того, какие данные вы хотите выбрать для обновление.

0

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

Мне удалось найти решение, добавив псевдоним ко всем столбцам.

UPDATE [dbo].[GL_PERIOD_BAL] 

     SET[dbo].[GL_PERIOD_BAL] . [CLOSING_CREDIT] = (SELECT GL. [CLOSING_CREDIT] 
         FROM [EmbraceData].[dbo].[_EMB_GL_ACTUALVALUESTYP] AS GL 
     WHERE GL.PERIOD = (DBO.gETMAXPERIOD([dbo]. [GL_PERIOD_BAL].GLACCOUNT,[dbo]. [GL_PERIOD_BAL].PERIOD)) 
          AND GL.ID COLLATE SQL_Latin1_General_CP1_CS_AS 
         = [dbo].[GL_PERIOD_BAL].GLACCOUNT  
     COLLATE SQL_Latin1_General_CP1_CS_AS) 
         WHERE LEFT([dbo].[GL_PERIOD_BAL].GLACCOUNT,4) = 'NM01' AND [dbo].[GL_PERIOD_BAL].[BAL.TYPE] = 'R' 
Смежные вопросы