我试图发送一个字符串到一个存储过程,它的单引号的多个ID的。我将使用该字符串在IN子句中的存储过程。
为了测试这个,我设置字符串为如下所示,但我得到错误。帮助我如何传递到存储过程?
DECLARE @str1 AS NVARCHAR(max)
SET @str1 = '3229622','4183229','3257553','3003673','3358312','0682773','4069249','0854620','4667379','0013862','1319623','3220826','3405633','0797654','3240120'
--print @str1
EXEC [GetMemberInfoAndMemberSubscriptions] @str1
我收到错误
消息102,级别15,状态1,行2
','附近有语法错误
以下是存储过程:
CREATE OR ALTER PROCEDURE [dbo].[GetMemberInfoAndMemberSubscriptions]
(@ip_master_customer_ids AS NVARCHAR(max))
AS
BEGIN
SELECT
[MASTER_CUSTOMER_ID], USR_SPE_Membership_Status
FROM
CUSTOMER
WHERE
[MASTER_CUSTOMER_ID] IN (@ip_master_customer_ids)
END
这是我的C#代码调用它:
string MemberNumbers = "'3229622','4183229','3257553','3003673','3358312','0682773','4069249','0854620','4667379','0013862','1319623','3220826','3405633','0797654','3240120'";
@Nick建议将表值参数与https://gavilan.blog/2022/04/20/passing-a-list-of-values-to-a-stored-procedure-from-c/链接
CREATE TYPE StringList AS TABLE (Id nvarchar(50));
我们还有什么其他解决方法来实现这一点?
3条答案
按热度按时间qoefvg9y1#
使用表值参数。实际上是为此用例设计的
https://learn.microsoft.com/en-us/sql/relational-databases/tables/use-table-valued-parameters-database-engine?view=sql-server-ver16
kognpnkq2#
如果你想在TSQL中将单引号表示为字符串,你需要对它进行转义,这也是一个单引号。
第一个和最后一个'分隔字符串第二个和第三个到最后一个转义后面的'允许它们成为字符串中的法律的值。
现在,这并不意味着这就是您解决所描述的特定问题的方式,而是您在TSQL中传递字符串中的单引号的方式。
bttbmeg03#
在 此 引用 此 文档 :
How do I pass a list as a parameter in a stored procedure? 的 最 大 值
这 就是 我 的 建议 :
A . 在 C # 应用 程序 中 , 像 这样 传递 数据
中 的 每 一 个
这 是 以 竖线 分隔 的 字符 串
B . 在 存储 过程 中 使用 字符 串 拆分 方法
格式
请 注意 , 这 是 有 限制 的 , 例如 , 您 的 ID 列表 不能 超过 8000 个 字符 。