SQL存储过程中的可选参数

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进行连接.

SQL*_*ace 5

在这种情况下使用命名参数

EXEC sp_get_user @username = {username}
Run Code Online (Sandbox Code Playgroud)

如果两个参数都是可选的,SQL服务器将按位置进行,因此您传入的第一个参数将映射到proc中的第一个参数