2013-04-17 27 views
2

我有一个问题(以及两个问题其实)我的存储过程,我可以在这里做一个新人的错误,但我一直试图修复它和惨败INSERT。输入堆栈溢出的大师们救我:d的SQL Server 2008R2 - 从多个表

我想用一个存储过程(它下面的工作方式),以能够插入一个新的约会到我的约会表。问题是,我试图通过输入他们的名字来获得设计师和客户端ID(显然,这些是在单独的表格中,您可以看到我试图在代码段中保留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 

任何意见或建议将是非常赞赏:)

编辑: 我注意到,当我注销并重新它移除了全名栏的问题 - 我也试试这个之前,但它没有工作,但很明显,现在它似乎并不虽然:(

回答

3

错误#1是一个问题...存储过程仍不能塞入任何东西:

你是不是甚至尝试从中插入ClientID和StylistID表,但是您要插入输入参数@ClientID和@StylistID。您整个选择不从表中选择任何东西。

然而,这不是导致行不被插入,因为他们会被插入NULL值,如果他们被选择返回。

错误#2:

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

修复:

INSERT语句之前搜索客户端ID和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-感觉,当东西是红色下划线,它不应该是

+0

谢谢你,完美的作品!我可以看到我现在要去的地方错了(当你知道嘿嘿时很容易)谢谢你把它弄得这么清楚:) – ChocolateSheep

+0

@ChocolateSheep欢迎你! :) –