【发布时间】:2016-11-08 13:37:13
【问题描述】:
我有这个存储过程:
ALTER PROCEDURE [dbo].[getClassInfo](@ClassId int)
AS
BEGIN
SELECT [usergroupId]
,[gName]
,[accessCode]
FROM [dbo].[usergroup]
where usergroupid = @ClassId OR accessCode = @ClassId
END
现在,我希望我发送的参数检查 usergroupId 是一个数字还是 accessCode 这是一个字符串。
哪种解决方案可以轻松地使用一个参数检查两种情况?
【问题讨论】:
-
看看:stackoverflow.com/questions/28893836/… 但在你的情况下转换为 varchar()
-
将
accessCode更改为表格中的数字。 -
@ClassId 作为 int 永远不可能保存 accessCode 可能 的所有值,您可能应该使用字符串作为参数,也许可以尝试将其解析为一个 int ......但这似乎你应该只使用两个参数。
-
你可以这样做
OR accessCode = CAST (@ClassId AS VARCHAR(30)) -
您是否使用了一个奇怪的 SQL Server SKU,您必须为使用的每个参数付费?如果没有,我建议为每个潜在匹配使用单独的命名参数,而不是尝试创建 swiss-army-knife 参数。
标签: sql tsql stored-procedures sql-server-2012