2017-05-26 26 views
0

我正在製作一個SP,這是我第一次接受用戶輸入。SP中使用的日期缺少單引號

該腳本的目的是生成一個不值班的員工名單。它的工作原理是,生成的列表是正確的。雖然SP不是

我遇到的問題是,一旦我將它創建爲SP然後執行它,就會出現錯誤消息,這是由於日期沒有包含所需的單引號引起的。

下面是SP代碼:

CREATE PROCEDURE List_of_Staff @var_shiftdate DATE 

    AS 

    SELECT DISTINCT 

    FirstName, 
    LastName, 
    Location, 
    Grade 

    FROM Vw_My_Staff_View 

    WHERE Location LIKE 'Hospital_Ward_1' 

    AND StaffID NOT IN 

    (SELECT StaffId FROM Tbl_List_of_Shifts WHERE ShiftDate = @var_shiftdate 
    AND ShiftType not in ('Day Off', 'TOIL') 
    AND ShiftStatus IN ('Assigned','Redeployed')) 

    ORDER BY LastName 

    GO 

的錯誤信息是:

消息102,級別15,狀態1,行5 附近有語法錯誤 ' - '。

而試圖執行SP的結果代碼就是這樣 - 並且在日期周圍沒有單引號。

USE [My_Database] 
    GO 

    DECLARE @return_value int 

    EXEC @return_value = [dbo].[List_of_Staff] 
    @var_shiftdate = 2017-05-05 

    SELECT 'Return Value' = @return_value 

    GO 

我只是想知道我能做些什麼,以使用戶不需要在SP請求變量進入繞日的單引號。這裏

謝謝:)

+0

什麼是把單引號括起來一個字面值在'exec'聲明的問題?值應該是正確的,單引號是值的一部分。 –

+0

如果你的用戶的用戶界面是一個SSMS查詢窗口(或道德等價物,例如運行SSMS嚮導),那麼他們需要提供引號 - 因爲沒有辦法直接在T-SQL中寫入日期文字語言。 –

+0

'Hospital_Ward_1'是否是一種模式(例如,它是否與'Hospital WardX1'匹配?)或字符串文字。如果它是一個字面改變喜歡=。不回答你的問題,只是觀察你的代碼。 –

回答

1

存在錯誤 日期應該是在單引號

USE [My_Database] 
     GO 
    Create table #temp(value int) 

    insert into #temp 
    EXEC [dbo].[List_of_Staff] '2017-05-05' 

    SELECT * from #temp 
    drop table #temp 

    GO 
+0

謝謝Ravi,是的,這就是我正在努力實現的目標。但是,當我右鍵單擊SP並選擇執行時,該日期將被傳遞到Exec語句中。 –