当前位置: 首页 > 编程语言 > C#

用逗号分隔的类似数组的字符串执行存储过程分享

时间:2023-04-10 23:02:29 C#

C#学习教程:使用逗号分隔的类数组字符串执行存储过程过程,在表上执行选择并需要类型为varchar(max)的输入变量。我想发送一堆由输入参数分隔的值,例如“Jack”、“Jane”、“Joe”,然后获取包含其中一个名称的行。在SQL中,代码将是Select*fromPersonnelwhereNamein('Jack','Joe','Jane');现在我想在我的C#应用程序中有一个变量,如strNames并填充它stringstrNames="'Jack','Joe','Jane'";并将此变量发送给SP并执行它。这就像Select*fromPersonnelwhereNamein(''Jack','Joe','Jane'')--这是错误的但是,我如何告诉SQLServer运行这个命令?我需要这样做,我知道这是可能的,请给我一些线索。首先,将个别名称传递给存储过程时不需要引用它们。使用(SqlCommandcmd=newSqlCommand("MyStoredProc",conn)){cmd.CommandType=CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@longFilter","Jack,Jill,Joe");using(SqlDataReaderreader=cmd.ExecuteReader()){...}}然后,在存储过程中,您可以使用一个简单的文本函数和一个临时表,如下所示,用逗号分隔字符串并分配字符串的每个部分临时表的条目:DECLARE@tempASTABLE(NameNVARCHAR(255))IFISNULL(@longFilter,'')''BEGINDECLARE@sNVARCHAR(max)WHILELEN(@longFilter)>0BEGINIFCHARINDEX(',',@longFilter)>0开始设置@s=LTRIM(RTRIM(SUBSTRING(@longFilter,1,CHARINDEX(',',@longFilter)-1)))SET@longFilter=SUBSTRING(@longFilter,CHARINDEX(',',@longFilter)+1,LEN(@longFilter))ENDELSEBEGINSET@s=LTRIM(RTRIM(@longFilter))SET@longFilter=''END--直到20140522INSERTINTO@temp(Name)VALUES(@s)ENDEND如果@temp不包含任何行(未过滤的结果),稍后使用以下SELECT获取@temp中所有姓名在@temp中的人或所有人:SELECT*FROMPersonnelWHERENameIN(SELECTName来自@temp)或(SELECTCOUNT(*)来自@temp)=0您可以使用表值参数基本上您可以在您的过程中插入一个值列表作为参数并将它们用作表,类似于Select*fromPersonnelwhereNamein(selectnamefrom@NamesTable)。现在,具体细节我认为您需要使用SqlServer中的Split函数将逗号分隔的字符串拆分为表。请参考这些链接。SqlServer中的拆分函数将逗号分隔的字符串拆分为表SQL用户定义函数用于定义分隔的字符串您可以使用Select*fromPersonnel从表中选择数据,其中Namein(从dbo.Split('Jack,Joe,Jane',','))您只需检查Name是否包含在字符串中。请注意末尾的逗号,以确保匹配全名stringstrNames=",Jack,Joe,Jane,";SQL变成select*fromPersonnelwherePATINDEX('%,'+Name+',%',@strNames)>0见http://www.sqlfiddle.com/#!3/8ee5a/1以上是C#学习教程:使用类似于数组的逗号分隔字符串来执行存储过程,分享所有内容。有用,需要了解更多C#学习教程,希望大家多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: