Sql 将多个select语句作为值插入表中

Sql 将多个select语句作为值插入表中,sql,sql-server,Sql,Sql Server,是否可以在SQL Server中执行以下操作: INSERT INTO MyTable (Col1,Col2,Col3,Col4,Col5,Col6,Col7) VALUES SELECT Col1 FROM Func1(), SELECT Col2 FROM Func2(), SELECT Col3,Col4,Col5 FROM Func3(), SELECT Col6 FROM Func4(), SELECT Col7 FROM Func5() 我有很多函数返回一个值结果,还有一

是否可以在SQL Server中执行以下操作:

INSERT INTO MyTable (Col1,Col2,Col3,Col4,Col5,Col6,Col7) VALUES

SELECT Col1 FROM Func1(),

SELECT Col2 FROM Func2(),

SELECT Col3,Col4,Col5 FROM Func3(),

SELECT Col6 FROM Func4(),

SELECT Col7 FROM Func5()
我有很多函数返回一个值结果,还有一个函数返回3列。我想将所有这些数据插入表的一行吗


我认为函数返回多个列可能是个问题?

如果所有函数只返回一行

INSERT INTO
  MyTable (Col1,Col2,Col3,Col4,Col5,Col6,Col7)
SELECT
  f1.col1, f2.col2, f3.col3, f3.col4, f3.col5, f4.col6, f5.col7
FROM
  (SELECT Col1 FROM Func1())           AS f1
CROSS JOIN
  (SELECT Col2 FROM Func2())           AS f2
CROSS JOIN
  (SELECT Col3,Col4,Col5 FROM Func3()) AS f3
CROSS JOIN
  (SELECT Col6 FROM Func4())           AS f4
CROSS JOIN
  (SELECT Col7 FROM Func5())           AS f5

如果函数返回多行,则需要以正常方式连接它们;使用谓词来确定哪一个左边的行连接到哪一个右边的行。

您必须删除每个select语句周围的值和all以及括号。

Func3是返回一行的表值函数吗?@Nikola,如果您的意思是它是否包含返回表as并返回一行,则是的。是的,这正是我的意思。我责备我的英语口语能力。那么,除了只返回一列之外,所有其他函数都是一样的吗?你的英语很好——这就是我所描述的——你需要在所有子查询中加上,在整个集合中加上。值从y中选择x,从b中选择a,等等Hi@MatBailie,我们不能在没有交叉连接的情况下这样做吗?水平关联两个数据集的唯一方法是使用连接。由于这些集合是单行,并且没有要连接的谓词,因此会生成CROSS join.ya,但其结果不正确。冗余数据。@Er.ShaileshS.Bankar那么您的数据集不是单行,在这种情况下,您需要一个内部联接或左联接,您可以在其上指定要联接的谓词。在这种情况下,请用示例数据、示例查询、预期结果等打开一个新问题。
 INSERT INTO MyTable (Col1,Col2,Col3,Col4,Col5,Col6,Col7) VALUES

 SELECT Col1 FROM Func1(),

 SELECT Col2 FROM Func2(),

 SELECT Col3 FROM (SELECT Col3,Col4,Col5 FROM Func3()),

 SELECT Col4 FROM (SELECT Col3,Col4,Col5 FROM Func3()),

 SELECT Col5 FROM (SELECT Col3,Col4,Col5 FROM Func3())

 SELECT Col6 FROM Func4(),

 SELECT Col7 FROM Func5()