从多个表插入

时间:2012-11-17 00:24:57

标签: sql-server-2008 sql-server-2005

Insert into po_header 
(Code,Date,Status,Month_Period,Year_Period,Created_Date,Created_User)

(Select PO_PR from Purchasing_Default Where Defaults = 'Default PO'),
GETDATE(),
'Saved',
(Select Details from Lookup Where Code ='Month_Period'),
(Select Details from Lookup Where Code ='Year_Period'),
GETDATE(),
''

返回错误:

Msg 102,Level 15,State 1,Line 5 ','附近的语法不正确。 Msg 102,Level 15,State 1,Line 8 ','附近的语法不正确。 Msg 102,Level 15,State 1,Line 9 ','。

附近的语法不正确

3 个答案:

答案 0 :(得分:1)

在列出的值

之前添加Select语句
Insert into po_header 
(Code,Date,Status,Month_Period,Year_Period,Created_Date,Created_User)
Select (Select PO_PR from Purchasing_Default Where Defaults = 'Default PO'),
       GETDATE(),
       'Saved',
       (Select Details from Lookup Where Code ='Month_Period'),
       (Select Details from Lookup Where Code ='Year_Period'),
       GETDATE(),
       ''

答案 1 :(得分:0)

您需要在尝试插入之前创建有效的数据集;你能编写一个SELECT语句来返回你想要插入目标表的所有列和行吗?如果没有更好地理解你的表和关系,很难给你更具体的建议,但显然你正在尝试的是无效的。但是,像:

INSERT INTO TABLE (col1, col2, col3)
SELECT a.col1, b.col2, b.col3
FROM a JOIN b on a.ID = b.ID

会奏效。

HTH。

答案 2 :(得分:0)

我通过全局变量解决了它:声明@PO_PR varchar(50);     声明@Month_Details varchar(50);     声明@Year_Details varchar(50);     设置@PO_PR =(从Purchasing_Default中选择PO_PR,默认值为'默认PO');     设置@Month_Details =(从查找中选择详细信息,其中Code ='Month_Period');     设置@Year_Details =(从查找中选择详细信息,其中Code ='Year_Period');

Insert into po_header (Code,Date,     
[Status],Month_Period,Year_Period,Created_Date,Created_User)

Values(
@PO_PR,
GETDATE(),
'Saved',
@Month_Details,
@Year_Details,
GETDATE(),
'');