如何将单引号字符串传递给SQL Server中的存储过程?

uelo1irk  于 2022-11-21  发布在  SQL Server
关注(0)|答案(3)|浏览(215)

我试图发送一个字符串到一个存储过程,它的单引号的多个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));

我们还有什么其他解决方法来实现这一点?

kognpnkq

kognpnkq2#

如果你想在TSQL中将单引号表示为字符串,你需要对它进行转义,这也是一个单引号。

DECLARE @string NVARCHAR(10) = '''apple'''
PRINT @string

第一个和最后一个'分隔字符串第二个和第三个到最后一个转义后面的'允许它们成为字符串中的法律的值。
现在,这并不意味着这就是您解决所描述的特定问题的方式,而是您在TSQL中传递字符串中的单引号的方式。

bttbmeg0

bttbmeg03#

在 此 引用 此 文档 :
How do I pass a list as a parameter in a stored procedure? 的 最 大 值
这 就是 我 的 建议 :
A . 在 C # 应用 程序 中 , 像 这样 传递 数据

string MemberNumbers = '1234|324763|234879|23879476|238478|23872|23178'

中 的 每 一 个
这 是 以 竖线 分隔 的 字符 串
B . 在 存储 过程 中 使用 字符 串 拆分 方法

create procedure GetMemberInfoAndMemberSubscriptions
    @ip_master_customer_ids varchar(8000)

    as

SELECT [MASTER_CUSTOMER_ID], USR_SPE_Membership_Status  FROM  
CUSTOMER WHERE [MASTER_CUSTOMER_ID] IN ( 
       Select Value from STRING_SPLIT( @ip_master_customer_ids, '|') 
       )

格式
请 注意 , 这 是 有 限制 的 , 例如 , 您 的 ID 列表 不能 超过 8000 个 字符 。

相关问题