【问题标题】:How do I insert data by selecting some values from another table如何通过从另一个表中选择一些值来插入数据
【发布时间】:2012-04-29 05:50:04
【问题描述】:

我需要根据用户提供的值选择所需的部分值来插入数据。

在场景中,客户端将提供staff_name, customer_nameproduct_nameINSERT 将从其他表中查找必要的数据以提取相应的 id。

这是我目前拥有的

INSERT INTO [Order](product_id, 
                    customer_id, 
                    staff_id, 
                    vehicle_regno, 
                    order_details, 
                    total_price, 
                    order_date)
     SELECT     
         stock.id, 
         customers.id AS Expr1, 
         Staff.id AS Expr2, 
         @vehicle_regno AS Expr3, 
         @order_details AS Expr4, 
         @total_price AS Expr5, 
         @order_date AS Expr6
     FROM         
         stock 
     CROSS JOIN
         customers CROSS 
     JOIN
         Staff
     WHERE     
         (stock.name = @stock_name) 
         AND (customers.name = @customers_name) 
         AND (Staff.name = @staff_name)

但它没有插入任何记录

感谢您的帮助

【问题讨论】:

  • 好吧,第一步是:单独运行SELECT - 它会返回任何内容吗?我最关心的是:您正在加入 Staff 表,但没有提供任何 JOIN 条件....这最终会成为笛卡尔积 - 这是您真正想要的吗?另外:与客户的交叉连接 - 真的吗?库存和客户之间没有任何联系吗?似乎你加入了太多东西,加入条件太少(我的口味).....
  • 看到您已经有四个用于插入的 SQL 变量 - 为什么您不能在 INSERT 之前使用语句确定正确的 stockIdcustomerIdstaff.id?我假设你想各有一个 - 对吧??
  • @UmutDerbentoğlu 这是查询设计器在视觉工作室中给我的
  • @marc_s 你的第一个问题,它不可能单独执行,因为这个 select 语句与 insert 语句绑定
  • 只需注释 INSERT INTO..... 部分......

标签: .net sql sql-server-2005


【解决方案1】:

其实你这里有两个独立的查询,可以分别测试。

我的意思是,你为什么不先测试这部分:

SELECT     
     stock.id, 
     customers.id AS Expr1, 
     Staff.id AS Expr2, 
     @vehicle_regno AS Expr3, 
     @order_details AS Expr4, 
     @total_price AS Expr5, 
     @order_date AS Expr6
 FROM         
     stock 
 CROSS JOIN
     customers CROSS 
 JOIN
     Staff
 WHERE     
     (stock.name = @stock_name) 
     AND (customers.name = @customers_name) 
     AND (Staff.name = @staff_name)

并查看是否有任何数据返回。

【讨论】:

  • 不能单独执行,因为这个 select 语句是和 insert 语句绑定的
  • 如果您从您的选择中删除额外的参数('@vehicle_regno'、'@order_details'、'@total_price' 和 '@order_date')怎么办 - 执行选择查询时您能看到任何数据吗?一个人”?
【解决方案2】:

我认为解决方案在于简化它。这是我的建议,

  1. 运行您的选择查询并确认它是否返回结果。

  2. 如果确认,编写一个存储过程,

a) 运行选择查询并在变量中设置结果。

b) 使用给定变量执行插入语句。

【讨论】:

  • 你能给我举个例子吗?
猜你喜欢
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 2013-05-25
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多