有沒有辦法限制SQL Server 2008中存儲過程參數的值?這是一個varchar。例如。我希望它只是'生產','發展'或'質量保證'。如果有人通過「Prod」,「Dev」,「UAT」或其他任何內容,我希望它會誤報。在SQL Server中限制存儲過程參數值
回答
您可以使用IF ... ELSE語句。
CREATE PROC SomeProc
@par VARCHAR(50)
AS
BEGIN
IF @par NOT IN ('Production', 'Development', 'QA')
RAISERROR(N'Your Message',16,1)
-- MORE CODE HERE
END
您可以通過使用表中查找有效值範圍的解決方案。
結合使用IF
區塊和RAISEERROR
關鍵字,您應該可以完成您想要的功能。
但是,這種限制聽起來像它屬於您的應用程序與您的存儲過程。
不同意最後一行。如果程序預計將被調用並且來自特定列表的參數似乎是完全合理的,如果一些廢話通過而不是默認默認或失敗,則會引發錯誤。 – 2012-01-18 15:09:23
我認爲它是一個公平點,我將SP邏輯限制爲僅限CRUD並且具有應用程序處理輸入驗證。在所有應用程序都受到源代碼控制,版本控制,代碼評論等的影響之後,SP邏輯經常會被忽視並變得難以調試。 – RobJohnson 2012-01-18 15:34:50
@MartinSmith - 除非存儲過程在命令行中或由管理員使用類似Management Studio的命令執行,否則我不明白爲什麼在存儲過程中需要此邏輯。您所描述的內容可以非常容易地在可以隱藏業務邏輯的應用程序中實現。 – 2012-01-18 15:37:10
我能想到做到這一點的唯一方法是自己手動檢查值。作爲一個粗略的例子,如:
CREATE PROCEDURE [dbo].[MyProcedure]
@value varchar(32)
AS
BEGIN
declare @isAllowed bit = 0
if @value in ('Hello', 'World')
set @isAllowed = 1
if @isAllowed begin
-- Do work here
end
else begin
-- Send error here
end
END
- 1. SQL Server存儲過程參數輸出
- 2. SQL Server存儲過程 - 參數
- 3. SQL Server存儲過程參數
- 4. SQL Server:參數化存儲過程
- 5. SQL Server CLR存儲過程JSON參數
- 6. SQL Server存儲過程參數分配
- 7. SQL Server 2008存儲過程中的默認參數值
- 8. SQL Server:存儲過程無限循環
- 9. SQL Server 2000-使用SELECT語句存儲過程參數值
- 10. 基於輸入參數值的SQL Server存儲過程
- 11. 解決sql服務器存儲過程參數8k限制
- 12. SQL Server 2005中.NET存儲過程的默認參數值/可選參數
- 13. 限制選定的行數MySQL中的存儲過程參數
- 14. 在SQL Server存儲過程中使用參數傳遞表名
- 15. 如何在SQL Server存儲過程中創建動態參數
- 16. 發送參數到存儲過程在SQL Server 2008中
- 17. SQL Server複製 - 存儲過程執行
- 18. SQL Server複製 - 新的存儲過程
- 19. SQL Server:複製存儲過程
- 20. 存儲過程NULL值SQL Server
- 21. SQL Server中存儲過程中輸入參數的別名
- 22. SQL Server中存儲過程中的參數
- 23. SQL Server:限制訪問管理員查看存儲過程
- 24. SQL Server僅將用戶限制到選定的存儲過程
- 25. 如何訪問SQL Server 2008中存儲過程的表值參數在Python
- 26. 在SQL Server中執行存儲過程
- 27. 在SQL Server中創建存儲過程
- 28. 在存儲過程中刪除SQL Server
- 29. 在SQL Server中存儲過程遞歸
- 30. T-SQL SQL Server - 存儲過程的參數
您是否嘗試過在存儲過程本身中添加驗證邏輯?例如。檢查參數的值,如果不符合標準,則使用RAISE ERROR。 – RobJohnson 2012-01-18 15:05:59