Como obter uma coluna derivada da união no valor inserido?

Buzina

Para o exemplo a seguir, defino o método de envio como 'UPS'

CREATE TABLE [dbo].[Customer] (CustomerID int primary key, ShipMethodRef INT)

INSERT INTO  [dbo].[Customer] VALUES (5497, 20);

CREATE TABLE [dbo].ShipMethod(ShipMethodID int PRIMARY KEY, Name varchar(10));

INSERT INTO  [dbo].ShipMethod VALUES (20, 'Fedex'), (21, 'UPS')


UPDATE [dbo].[Customer]  
set ShipMethodRef = CASE WHEN EXISTS (SELECT ShipMethodID from [dbo].[ShipMethod]
                         WHERE [dbo].[ShipMethod].Name = 'UPS') 
                    THEN (SELECT ShipMethodID from [dbo].[ShipMethod] 
                         WHERE [dbo].[ShipMethod].Name = 'UPS')
                    ELSE curTable.ShipMethodRef END
OUTPUT ShipMethod.Name as ShipMethodName
FROM [dbo].[Customer] curTable 
JOIN [dbo].ShipMethod ShipMethod ON curTable.ShipMethodRef = ShipMethod.ShipMethodID
WHERE CustomerID=5497;

A OUTPUTcláusula retorna Fedex- Como posso alterá-la para refletir o estado pós-inserção de que o método de envio do cliente é 'UPS' (já que o ID do método de envio agora é 21)?

Zohar Peled

Não acho que isso possa ser feito com uma única instrução, exceto na forma como Martin mostrou em seu comentário , mas você pode obter a saída inserida em uma variável de tabela ou uma tabela temporária e, em seguida, selecionar aquela associada às tabelas de tradução.
Veja como eu faria isso (observe que a instrução de atualização é simplificada):

DECLARE @UpdatedIds AS TABLE (ShipMethodID int);

UPDATE [dbo].[Customer]  
SET ShipMethodRef = COALESCE((
        SELECT ShipMethodID 
        FROM [dbo].[ShipMethod] 
        WHERE [dbo].[ShipMethod].Name = 'UPS'    
    ), ShipMethodRef)
OUTPUT inserted.ShipMethodRef INTO @UpdatedIds
FROM [dbo].[Customer] 
WHERE CustomerID=5497;

SELECT SM.ShipMethodID, SM.Name
FROM [dbo].ShipMethod AS SM
JOIN @UpdatedIds AS Updated
    ON SM.ShipMethodID = Updated.ShipMethodID

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como obter o valor da célula com base no valor da coluna em uma etapa?

Como posso obter o valor da coluna A se selecionar um valor específico da coluna B em uma matriz?

Como obter todas as linhas da tabela MySQL onde o valor de uma coluna é o mesmo?

Como obter o valor mais alto em uma linha junto com o nome da coluna

Como obter todas as linhas da tabela MySQL onde o valor de uma coluna é o mesmo?

Como obter o valor mais bem classificado da coluna mais à direita em uma junção

Com o PostgreSQL, como obter o valor da coluna um com um item em uma matriz?

Como obter um valor que não seja nulo em uma coluna da tabela de dados

Como obter o valor da coluna da linha selecionada

Como obter o valor da coluna e da linha?

Como obter o valor da linha e o valor da coluna (data) juntos de uma célula no Excel usando python

Como posso obter o valor da chave primária inserido no gatilho AFTER INSERT no Oracle?

Como obter o valor de uma coluna com base em um campo que contém o nome da coluna?

pandas: como gerar uma nova coluna para obter o valor de outra coluna da última data-hora

Como obter o valor da última coluna não NA

Como alterar todas as cores da coluna JTable em uma linha quando o mouse for inserido?

Como você usa a saída de uma função, como um valor inserido em outra?

Como obter o valor da coluna Timestamp no android via cursor?

Como obter o valor da coluna do próximo registro

Como posso obter o valor mínimo da coluna no SQL?

Como obter o valor da coluna externa na subconsulta

Como obter o valor da coluna do próximo registro

Como obter o valor da coluna do Excel em JAVA?

Como obter o valor selecionado da coluna datagridview combobox?

como obter o valor da coluna onEditingStart: function (e)

Como obter o segundo maior valor e nome da coluna

Como obter o valor da 3ª coluna usando regex

Como obter o valor da data para a caixa de texto de uma coluna em vez da série de datas?

Como posso obter e separar o resultado de uma coluna para ser inserido em uma nova tabela

TOP lista

quentelabel

Arquivo