2017-06-07 2 views
0

ich zur Zeit auf einer T-SQL-Abfrage auf SQL Server arbeite 2014TSQL Wählen Sie in temporäre Tabelle und fügen Sie Id

Ich versuche, eine zusätzliche ID für jede wählen Datum aus 1 Tabelle in einer anderen und fügen Reihe.

Meine Abfrage sieht wie folgt aus:

DECLARE @TargetId = 1 

SELECT * INTO #tmpProjects FROM @Projects 
UNION SELECT @TargetId AS 'TargetId' 

Leider ist diese Select-Anweisung nicht funktioniert ...

Meine gewünschte Ausgabe #tmpProjects sollte wie folgt aussehen:

ProjectId | Title | Manager | TargetId 
----------+-------------+-----------+----------- 
1   | projectX | 1123 | 1 
2   | projectY | 2245 | 1 
3   | projectZ | 3335 | 1 

In meiner Importtabelle @Projects bekomme ich die Spalten ProjectId, Title und Manager.

Wissen Sie, wie Sie dieses Problem lösen können? So in eine temporäre Tabelle auswählen und eine zusätzliche ID hinzufügen?

Vielen Dank !!

+3

Fügen Sie einfach an die select: 'wählen projectID, Titel, Manager @TargetId AS TargetId' – HoneyBadger

Antwort

1
create table #tmpProjects 
    (
     ProjectId varchar(20) , 
     Title varchar(20) , 
     Manager varchar(20), 
     TargetId varchar(20) 
    ) 
DECLARE @Projects table (ProjectId varchar(20) , Title varchar(20) ,Manager varchar(20)) 
insert into @Projects values ('p1' , 't1' , 'm1') 
insert into @Projects values ('p2' , 't2' , 'm2') 
select * from @Projects 

------------- **solution starts here** --------------- 
DECLARE @TargetId int 
set @TargetId = 1 
insert into #tmpProjects (ProjectId ,Title , Manager , TargetId) 
select ProjectId ,Title , Manager , @TargetId 
from @Projects 

select * from #tmpProjects 
+0

Ich löste es am Ende so. Danke für das detaillierte Beispiel! :) – TimHorton

1

Wenn Sie eine zusätzliche Spalte zu Ihrer Tabelle hinzufügen möchten, müssen Sie sie ändern, um eine neue Spalte hinzuzufügen. Um den Standardwert in der Spalte beizubehalten, können Sie das Schlüsselwort DEFAULT verwenden und den Wert angeben. finden Sie die folgende Abfrage, ich hoffe, dass dies hilfreich sein wird:

CREATE TABLE PROJECTS(ProjectId int, Title varchar(50), Manager varchar(50)) 
INSERT INTO PROJECTS 
VALUES 
(1, 'projectX' , '1123'), 
(2, 'projectY' , '2245'), 
(3, 'projectZ' , '3335') 
GO 
BEGIN 
SELECT * INTO #tmpProjects FROM PROJECTS 
ALTER TABLE #tmpProjects ADD TargetId INT NOT NULL DEFAULT (1) 
SELECT * FROM #tmpProjects 
END 

Sie keine Variable innerhalb Standard-Schlüsselwort verwenden können. Sie können jedoch eine Skalarfunktion erstellen, um eine beliebige Variable zu verwenden. Sie können diesen Link überprüfen, wie Sie mit der Skalarfunktion den Standardwert zu Ihrer Spalte hinzufügen können.

ALTER TABLE with programmatically determined constant DEFAULT value

Eine weitere Sache here.You muss explizit Ihre Spalte als NOT NULL definieren, wenn Sie STANDARD Schlüsselwort verwenden möchten Standardwerte einzufügen. Wenn Sie es nicht tun, dann wird es nur NULL Werte halten und wird keinen Wert einfügen, die Sie mit STANDARD Stichwort

-Code zur Verfügung gestellt haben:

ALTER TABLE #tmpProjects ADD TargetId INT NOT NULL DEFAULT (1) 

Dieser Einsatz wird in Ihrer TargetId-Spalte. Aber

ALTER TABLE #tmpProjects ADD TargetId INT DEFAULT (1) 

Dies wird einfügen NULL in Ihrer TargetId Spalte

Hoffnung Ihr Problem dadurch gelöst wird.

+0

Dank für diese ausführliche Erklärung !! Es ist in der Tat hilfreich :)) – TimHorton

Verwandte Themen