jon*_*aze 2 linq stored-procedures optional-parameters sql-server-2008
我正在尝试创建一个具有可选参数的存储过程.我按照这里列出的说明操作.我也引用了这个问题.但是我一直收到以下错误:
将数据类型varchar转换为int时出错.
当我执行它时,它工作
EXEC sp_get_user {id#}
Run Code Online (Sandbox Code Playgroud)
要么
EXEC sp_get_user NULL, {username}
Run Code Online (Sandbox Code Playgroud)
但失败了
EXEC sp_get_user {username}
Run Code Online (Sandbox Code Playgroud)
存储过程
@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))
Run Code Online (Sandbox Code Playgroud)
我试过添加OPTION(RECOMPILE)并没有成功.我想让它变得动态,以便其他开发人员可以调用此SP,而无需每次都指定所有参数.如果它有所作为,它们将通过LINQ进行连接.
在这种情况下使用命名参数
EXEC sp_get_user @username = {username}
Run Code Online (Sandbox Code Playgroud)
如果两个参数都是可选的,SQL服务器将按位置进行,因此您传入的第一个参数将映射到proc中的第一个参数