2013-01-09 10 views
5

Potrzebuję wstawić wartości tych wyborów do tabeli. Zwracają wiele wierszy i dla każdego wiersza potrzebuję wstawić kolumnę do nowej tabeli.Wstaw w wiele wyborów

Ex:

select (select id from X where name=Contacts.Company) as IDClient, 
FirstName + right(' '+ cast(LastName as varchar(20)), 20) as NewName, 
(select id from Y where newid=8 and description=Contacts.JobTitle) as IDRole, 
Initials 
from Contacts 

I muszę zrobić coś takiego dla każdego rzędu tej Wybierz:

insert into TableX (IDClient,NewName,IDRole,'0','0','0',Initials,'XXX',GETDATE(),NULL,NULL) 

Ty

edytowany

insert into TableX (IDClient,NewName,IDRole,'0','0','0',Initials,'XXX',GETDATE(),NULL,NULL) 
select 
(select id from X where nAme=Contacts.Company) as IDClient, 
FirstName + right(' '+ cast(LastName as varchar(20)), 20) as NewName, 
(select id from Y where newid=8 and description=Contacts.JobTitle) as IDRole, 
Initials 
from Contacts 

Po wykonaniu tego otrzymuję ten błąd:

"Niepoprawna składnia w pobliżu" 0 "."

Odpowiedz

13

ile brakuje mi coś powinno być w stanie to zrobić:

insert into Table (IDclient,NewName,IDRole,Initials) 
select (select id from X where name=Contacts.Company) as IDClient, 
    FirstName + right(' '+ cast(LastName as varchar(20)), 20) as NewName, 
    (select id from Y where newid=8 and description=Contacts.JobTitle) as IDRole, 
    Initials 
from Contacts 

będzie po prostu użyć składni INSERT INTO...SELECT...FROM...

Teraz, jeśli nie masz tabelę, a następnie można SELECT..INTO nowa tabela temp:

select (select id from X where name=Contacts.Company) as IDClient, 
    FirstName + right(' '+ cast(LastName as varchar(20)), 20) as NewName, 
    (select id from Y where newid=8 and description=Contacts.JobTitle) as IDRole, 
    Initials 
into #table 
from Contacts 

Lub jeśli chcesz użyć dołącza do tego wówczas:

insert into Table (IDclient,NewName,IDRole,Initials) 
select x.id as IDClient, 
    c.FirstName + right(' '+ cast(c.LastName as varchar(20)), 20) as NewName, 
    y.id as IDRole, 
    c.Initials 
from Contacts c 
inner join x 
    on x.name=c.Company 
inner join y 
    on y.description=c.JobTitle 
    and y.newid=8 

Teraz oryginał post pokazuje wstawkę:

insert into Table (IDclient,NewName,'',IDRole,Initials,NULL) 

Masz dwa pola, które nie mają nazw m, to nie jest poprawna składnia. W instrukcji wstawiania, aby mieć nazwy bez kolumn i wstaw do wszystkich lub nazwij kolumny, do których chcesz wstawić wartości. Nie można używać pustych ciągów '' lub null jako nazw kolumn. Jeśli chcesz, aby te wartości w brzmieniu wówczas trzeba podać nazwiska do nich:

insert into Table (IDclient,NewName,col3,IDRole,Initials,col5) 
select x.id as IDClient, 
    c.FirstName + right(' '+ cast(c.LastName as varchar(20)), 20) as NewName, 
    '' as col3 
    y.id as IDRole, 
    c.Initials, 
    null as col5 
from Contacts c 
inner join x 
    on x.name=c.Company 
inner join y 
    on y.description=c.JobTitle 
    and y.newid=8 

oparciu o edycję, należy użyć następującego:

-- this insert line should state column names not '0', '0', etc 
-- replace these with the names of your columns you are inserting into like the others, 
-- then place these values that you want to insert in the select list 
insert into TableX (IDClient,NewName,IDRole,'0','0','0',Initials,'XXX',GETDATE(),NULL,NULL) 
select 
    (select id from X where nAme=Contacts.Company) as IDClient, 
    FirstName + right(' '+ cast(LastName as varchar(20)), 20) as NewName, 
    (select id from Y where newid=8 and description=Contacts.JobTitle) as IDRole, 
    '0', 
    '0', 
    '0', 
    Initials, 
    'XXX', 
    getdate(), 
    null, 
    null 
from Contacts 
+0

I'me otrzymuję „Nieprawidłowy składnia w pobliżu '0' ", gdy używam kodu powyżej –

+0

W swoim' INSERT' musisz użyć nazw kolumn, a nie 'getdate()', itd. te wartości idą w wybranej części instrukcji zobacz moje ostatnie zapytanie, którego użyłem. – Taryn