sql - 无法使用多个select语句向表中插入数据

标签 sql database sql-server-2008 database-design

因此,我尝试将三个不同表中的数据插入到 Main_Contract_Data 表中,但它产生了如下所示的错误,有人知道为什么吗?

错误: 消息 120,级别 15,状态 1,第 1 行 INSERT 语句的选择列表包含的项目少于插入列表。 SELECT 值的数量必须与 INSERT 列的数量匹配。

//SQL Server 2008代码

INSERT INTO Main_Contract_Data
        (organisation_name,
         contract_start_date,
         a_manager,
         d_manager)
   (SELECT [Client]
            FROM [Internal].[dbo].[RequiredFields$])
   (SELECT [Start Date] 
            FROM [Internal].[dbo].[RequiredFields$])
   (SELECT person_id
            FROM A_Manager
            WHERE person_id = '5')
   (SELECT person_id
            FROM D_Manager
            WHERE person_id = '6')

最佳答案

您只需要进行这些子查询:

INSERT INTO Main_Contract_Data
        (organisation_name,
         contract_start_date,
         a_manager,
         d_manager)
SELECT
   (SELECT [Client]
            FROM [Internal].[dbo].[RequiredFields$]),
   (SELECT [Start Date] 
            FROM [Internal].[dbo].[RequiredFields$]),
   (SELECT person_id
            FROM A_Manager
            WHERE person_id = '5'),
   (SELECT person_id
            FROM D_Manager
            WHERE person_id = '6')

但请记住,每个子查询只能返回一行,而整体查询需要返回整个结果集。如果也只有一行,那也没关系,但整体 SELECT 会返回一个或多个,而每个子查询都会返回一行和一个值 em> 对于整个查询中的每一行。

关于sql - 无法使用多个select语句向表中插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23270678/

相关文章:

sql - 情况当不同的值然后求和另一个值?

mysql - 计算两个日期之间的时间差(以分钟为单位)

android - SQLiteDatabase 更新不起作用?

mysql - 数据库: Making a Log of actions,如何处理各种引用?

sql-server - 如何使用单个查询在 SQL Server 2008 中创建和更新 View

sql - 根据优先级从列中选择值

mysql - 如何使这个 eav 查询产生水平结果

java - 删除 JSF dataTable 中数据库的行

java - Spring/Java 从一个方法调用变量作为变量

database - 用于在特定记录处打开 Access Web DB 表单的 URL