2013-01-09 52 views
5

Tôi cần chèn các giá trị của các lựa chọn này vào một bảng. Chúng trả về nhiều hàng và cho mỗi hàng tôi cần chèn một cột vào một bảng mới.Chèn vào nhiều lựa chọn

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 

Và tôi cần phải làm một cái gì đó như thế này cho mỗi hàng này chọn:

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

Ty

EDITED

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 

Khi tôi thực hiện việc này, tôi nhận được lỗi này:

"Cú pháp không chính xác gần '0'."

Trả lời

13

Trừ khi tôi đang thiếu một cái gì đó bạn sẽ có thể để làm điều này:

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ạn sẽ chỉ sử dụng cú pháp INSERT INTO...SELECT...FROM...

Bây giờ nếu bạn không có một bảng, sau đó bạn có thể SELECT..INTO một bảng temp mới:

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 

Hoặc nếu bạn muốn sử dụng tham gia cho việc này sau đó:

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 

Bây giờ ban đầu của bạn bài đăng hiển thị phần chèn này:

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

Bạn có hai trường không có tên m, đây không phải là cú pháp đúng. Trong câu lệnh chèn của bạn hoặc phải đặt tên cho không có cột và chèn vào tất cả hoặc đặt tên cho các cột mà bạn muốn chèn các giá trị vào. Bạn không thể sử dụng một chuỗi trống '' hoặc null làm tên cột. Nếu bạn muốn những giá trị này sẽ được chèn vào sau đó bạn phải cung cấp tên cho chúng:

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 

Dựa trên chỉnh sửa của bạn, bạn cần phải sử dụng như sau:

-- 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 nhận được một "không đúng cú pháp gần '0' "khi tôi sử dụng mã ở trên –

+0

Trong' INSERT', bạn phải sử dụng các tên cột không phải 'getdate()', vv các giá trị đó nằm trong phần chọn của câu lệnh, xem truy vấn cuối cùng của tôi mà tôi đã sử dụng. – Taryn

Các vấn đề liên quan