Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在单个表的多列中插入多行_Sql_Sql Server 2008_Stored Procedures - Fatal编程技术网

Sql 如何在单个表的多列中插入多行

Sql 如何在单个表的多列中插入多行,sql,sql-server-2008,stored-procedures,Sql,Sql Server 2008,Stored Procedures,我想在一个查询中使用两个名为#temp1的不同临时表在多个列中插入多行,这两个临时表具有col QID和#temp2具有col RID,我试着这样做 insert into table1(ID,quetion,rating) select @ID,QID,RID from #Temp1,#temp2 ID Quest Rate 2 1 5 2 2 5 2 3 5 2 1 4 2 2 4 2 3

我想在一个查询中使用两个名为
#temp1
的不同临时表在多个列中插入多行,这两个临时表具有col QID和
#temp2
具有col RID,我试着这样做

insert into table1(ID,quetion,rating) select @ID,QID,RID from #Temp1,#temp2
 ID  Quest   Rate
    2   1   5
    2   2   5
    2   3   5
    2   1   4
    2   2   4
    2   3   4
    2   1   3
    2   2   3
    2   3   3
ID  Quest Rate
2   1   5
2   2   4
2   3   3
当我插入数据时,它看起来像这样

insert into table1(ID,quetion,rating) select @ID,QID,RID from #Temp1,#temp2
 ID  Quest   Rate
    2   1   5
    2   2   5
    2   3   5
    2   1   4
    2   2   4
    2   3   4
    2   1   3
    2   2   3
    2   3   3
ID  Quest Rate
2   1   5
2   2   4
2   3   3
但我想这样插入

insert into table1(ID,quetion,rating) select @ID,QID,RID from #Temp1,#temp2
 ID  Quest   Rate
    2   1   5
    2   2   5
    2   3   5
    2   1   4
    2   2   4
    2   3   4
    2   1   3
    2   2   3
    2   3   3
ID  Quest Rate
2   1   5
2   2   4
2   3   3

提前感谢:

您可以使用
交叉连接插入NxM行,其中N是#Temp1中的行数,M是#temp2中的行数:

如果两个临时表中的行都相关,请使用常规联接:

insert into table1(ID, quetion, rating) 
select @ID, t1.QID, t2.RID 
from #Temp1 t1
join #Temp2 t2
on t1.id = t2.id
这通常插入的行数少于NxM。

由于表#temp1和#temp2没有公共列,您可以使用CTE和行数()获得所需的结果,如下所示:

;WITH #temp1tbl (commonid, qid) 
     AS (SELECT Row_number() 
                  OVER( 
                    ORDER BY qid) AS CommonId, 
                qid 
         FROM   #temp1), 
     #temp2tbl (commonid, rid) 
     AS (SELECT Row_number() 
                  OVER( 
                    ORDER BY (SELECT 1)) AS CommonId, 
                rid 
         FROM   #temp2) 
INSERT INTO table1 
            (id, 
             quest, 
             rating) 
SELECT @ID, 
       qid, 
       rid 
FROM   #temp1tbl 
       LEFT OUTER JOIN #temp2tbl 
                    ON #temp1tbl.commonid = #temp2tbl.commonid 

您当前正在执行交叉联接。我们需要知道临时表的结构以及它们之间的关系Askers初始查询中缺少列的两部分命名向我表明,
RID
QID
不在两个表中。@Andomar:感谢您的回答,我甚至尝试了交叉连接,得到了相同的结果注意:两个临时表都只有一列+1,这是个好主意,但是假设增加的QID与增加的RID匹配,这可能不是事实。是的..因为没有共同的列,我添加了行号()到每个临时表,并根据发布的样本数据..映射增加QID和减少RID。@deepshikha:谢谢,它正在工作,但评级存在问题。费率应按给定顺序插入,但它正在插入asc或des订单。如果不需要订购,请将order BY RID desc替换为order BY(选择1)。更新了答案。希望这有帮助!!