【问题标题】:SQL Server 2008R2 - INSERT from Multiple TablesSQL Server 2008R2 - 从多个表插入
【发布时间】:2013-04-17 10:46:44
【问题描述】:

我的存储过程有一个问题(实际上是两个问题),我可能在这里犯了一个新手错误,但我试图修复它并惨遭失败。输入堆栈溢出大师来救我:D

我希望能够使用存储过程(其工作原理如下)将新约会插入到我的约会表中。问题是我试图通过输入他们的名字来获取造型师和客户 ID(显然这些是在单独的表中,你可以看到我试图在代码 sn-p 中获取 ID 的位置。 ..) 无论如何,我没有遇到任何错误,但它实际上并没有做任何事情,因为在测试存储过程时没有任何内容插入到约会表中(它执行得很好)。我不知道为什么会这样,也不知道从哪里开始寻找。

还有一个可能相关的问题,那就是 c.fullName 和 s.fullName 经常用红线下划线,表示找不到它们。这两个列都存在于客户表和造型师表中;它们都是计算列(名字+姓氏)并且在其他查询中工作得很好,所以我不明白为什么它们在这里不起作用。

@AppDate date = null,
@AppTime time(5) = null,
@Details varchar(255) = null,
@ClientName varchar(50) = null,
@StylistName varchar(50) = null,
@ClientID int = null,
@StylistID int = null

INSERT into appointment(appDate, appTime, details, clientID, stylistID)
SELECT
    @AppDate AS appDate, 
    @AppTime AS appTime, 
    @Details AS details,
    @ClientID, 
    @StylistID
FROM appointment a
JOIN client c 
ON c.clientID = a.clientID
JOIN stylist s
ON s.stylistID = a.stylistID
WHERE c.fullName = @ClientName
AND s.fullName = @StylistName

任何想法或提示将不胜感激:)

编辑: 我只是注意到,当我注销并重新登录时,它删除了 fullName 列的问题 - 我之前确实尝试过,但它没有用,但显然现在它似乎不是问题......存储的过程仍然没有插入任何东西:(

【问题讨论】:

    标签: sql select join sql-server-2008-r2 sql-insert


    【解决方案1】:

    错误 #1:

    您甚至没有尝试从表中插入 ClientID 和 StylistID,而是插入回输入参数 @ClientID 和 @StylistID。您的整个选择不是从表格中选择任何东西。

    但是,这不会导致行不被插入,因为如果它们被 select 返回,它们将被插入 NULL 值。

    错误 #2:

    您的查询实际上是在搜索具有相同客户和造型师的现有约会。我猜那些不存在,这就是为什么没有插入行。如果它们确实存在,您将使用此插入复制它们。

    修复:

    在 INSERT 语句之前搜索 ClientID 和 StylistID。从输入参数中删除@ClientID 和@StylistID,并在过程体中声明它们。

    DECLARE @ClientID int;
    DECLARE @StylistID int;
    
    SELECT @ClientID = ClientID FROM client WHERE fullName = @ClientName
    SELECT @StylistID = StylistID FROM stylist WHERE fullName = @StylistName
    
    
    INSERT into appointment(appDate, appTime, details, clientID, stylistID)
    SELECT
        @AppDate AS appDate, 
        @AppTime AS appTime, 
        @Details AS details,
        @ClientID, 
        @StylistID
    

    PS: CTRL-SHIFT-R 刷新 Intelli-sense 时有红色下划线,它不应该是

    【讨论】:

    • 谢谢你,完美!我现在可以看到我哪里出错了(当你知道怎么做时很容易,呵呵)谢谢你说得这么清楚:)
    猜你喜欢
    • 2016-08-12
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2016-09-10
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多