2016-10-19 6 views
-1

Ich habe eine Tabelle unten und ich werde eine neue Spalte mit dem Namen 'Betrag' erstellen. Die vorhandene Spalte "Id" ist ein Fremdschlüssel und verknüpft die Informationen in einer Tabelle mit "Loan" ("Id" ist der Primärschlüssel der Tabelle "Loan"). Die einfache Sache, die ich tun möchte, ist, jede neu geschaffene Betragszelle mit dem richtigen Betrag zu versehen, der von der Tabelle "Darlehen" erhalten wird, die mit "Identifikation" zugeordnet wird. Ich verwende derzeit lokale Variable und selbst erstellten Tabellentyp, um den Betragswert in "Loan" von Fall zu Fall zu finden. Gibt es einen anderen effizienteren Weg, dieselbe Operation auszuführen? Danke vielmals. MyTable war wie folgt:Wie füllt man die neu erstellte Spalte effizient aus?

enter image description here

Mein Code war wie folgt:

ALTER TABLE MyTable 
ADD Amount MONEY 


CREATE TYPE ListofID AS TABLE (idx INT IDENTITY(1,1), ID VARCHAR(255)) 

DECLARE @Table_ID_List ListofID 
INSERT @Table_ID_List (
ID) 
SELECT Id FROM MyTable 

DECLARE @i INT 
DECLARE @cnt INT 
SELECT @i = min(idx) - 1, @cnt = max(idx) FROM @Table_ID_List 

DECLARE @app VARCHAR(255) 

WHILE @i<@cnt 

BEGIN 

    SELECT @i = @i + 1 
    SELECT @app = (SELECT ID FROM @Table_ID_List WHERE idx = @i) 

    UPDATE MyTable 
    SET Amount =(SELECT Amount FROM Loan WHERE Id = @app) 

    WHERE Id = @app 

END 
+0

Sie können dem Standardwert eine Skalarfunktion zuweisen. Sie können keine Spaltenwerte übergeben. – selami

+1

Hier ist ein großartiger Ort um anzufangen. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

Sie müssen sagen, was Sie bisher versucht haben. –

Antwort

0

ich Ihre Frage verpasst haben, aber ich glaube, dass Sie diese Aussage direkt über ein Update tun. Etwas in der Art von:

ALTER TABLE MyTable ADD Amount MONEY 


UPDATE 
    t1 
SET 
    t1.Amount = t2.Amount 
FROM 
    MyTable t1 
    JOIN Loan t2 
    ON t1.Id = t2.Id 

Würde das nicht der Trick?

Verwandte Themen