2013-04-17 32 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歡迎你! :) –