我正在尝试创建一个具有可选参数的存储过程。我遵循了列出的说明 here .我还引用了这个 SO question .但是我不断收到以下错误:
Error converting data type varchar to int.
当我执行它时它起作用
EXEC sp_get_user {id#}
或
EXEC sp_get_user NULL, {username}
但失败了
EXEC sp_get_user {username}
存储过程
@id int = NULL,
@username nvarchar(50) = NULL
SELECT
username = COALESCE(a.Username, b.Username),
password = COALESCE(a.Password, b.Password),
signup_date = COALESCE(a.SignedUpOn, b.Signup_Date)
FROM table1 a
FULL OUTER JOIN table 2 b
ON a.ID = b.ID
WHERE ((a.ID = @id OR @id IS NULL)
AND (a.Username = @username OR @username IS NULL)
OR (b.ID = @id OR @id IS NULL)
AND (b.Username = @username OR @username IS NULL))
我尝试添加 OPTION(RECOMPILE)
但没有成功。我想让它动态化,这样其他开发人员就可以调用这个 SP,而不必每次都指定所有参数。如果有所不同,他们将通过 LINQ 进行连接。
最佳答案
在这种情况下使用命名参数
EXEC sp_get_user @username = {username}
如果两个参数都是可选的,SQL Server 将按位置进行排序,因此您传入的第一个参数将映射到过程中的第一个
关于linq - SQL 存储过程中的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5587494/