2016-05-11 14 views
0

Ich verwende eine temporäre Tabelle, um Daten einzufügen, die später aktualisiert werden.Einfügen in temporäre Tabelle und dann Update

Zum Beispiel:

SELECT 
    Name, 
    Address, 
    '' as LaterTobeUpdateField 
INTO #MyTempTable 
FROM OriginalTable 

Dann aktualisiere ich die temporäre Tabelle

UPDATE #MyTempTable 
SET LaterTobeUpdateField = 'new text' 

Da der ursprüngliche Wert von LaterTobeUpdateField war '', während der Aktualisierung ich die folgende Fehlermeldung erhalten:

String or binary data would be truncated.

Gibt es eine andere Problemumgehung als die temporäre Tabelle zu deklarieren, bevor wir uns befinden ed?

Dies funktioniert auch, aber seine hässliche

SELECT 
    Name, 
    Address, 
    '    ' as LaterTobeUpdateField 
INTO #MyTempTable 
FROM OriginalTable 
+0

entweder die Art und Weise, wie Sie es tun, zuerst die temporäre Tabelle erstellen oder vorher die Länge Ihrer Spalte definieren: 'SELECT Name, Adresse, CONVERT (VARCHAR (20), '') als LaterTobeUpdateField' – Lamak

+0

Das funktioniert, Post und ich werde Wählen Sie als Lösung –

Antwort

2

Per mein Kommentar: Man könnte die temporäre Tabelle zunächst erstellen oder definieren Sie die Länge Ihrer Spalte vorher

SELECT 
    Name, 
    Address, 
    CONVERT(VARCHAR(20),'') as LaterTobeUpdateField 
INTO #MyTempTable 
FROM OriginalTable; 
0
SELECT 
    Name, 
    Address, 
    '' as LaterTobeUpdateField 
INTO #MyTempTable 
FROM OriginalTable 

ALTER TABLE #MyTempTable 
ALTER COLUMN LaterTobeUpdateField NVARCHAR(20) 

UPDATE #MyTempTable 
SET LaterTobeUpdateField = 'new text' 
1

Etwas wortreich aber sichere Lösung:

declare @myTempTable(name varchar(50), 
     address varchar(50), 
     LaterTobeUpdateField varchar(20)) 
insert @myTempTable 
select name, address, '' a from originalTable 
--do whatever you want 
Verwandte Themen