linq - SQL 存储过程中的可选参数

标签 linq sql-server-2008 stored-procedures optional-parameters

我正在尝试创建一个具有可选参数的存储过程。我遵循了列出的说明 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/

相关文章:

c# - MySQL ODBC 存储过程结果缺少列

sql - 如何为此编写动态 SQL?

c# - 获取 ForEach 中的当前索引

sql-server - SQL Server 2008 中存储整数值的最小数据类型是什么?

涉及 group by 和 join 的 SQL 查询

sql - 将 nvarchar 转换为 int 时动态 SQL 错误

c# - 结合 foreach 和 linq

c# - linq 查询样式的 DefaultIfEmpty 在哪里

c# - 使用 linq 的 EF 对象列表到列表字典

sql-server - 使用每 x 分钟更新一次的临时表消除查询