sql – 使用IN参数的过程

前端之家收集整理的这篇文章主要介绍了sql – 使用IN参数的过程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
你能帮我吗,我想创建一个程序,允许我发送一个参数把它放在一个IN子句中,如下所示:
  1. CREATE PROCEDURE [dbo].[NamesQry]
  2. @Names char(150)
  3. AS
  4.  
  5. SELECT * From Mydatabase Where
  6. Names in (@Names);

并执行

  1. EXEC [dbo].[IGDMediaSkills] 'Carl,Johnson'

问题是我不知道如何将多参数发送到程序.

解决方法

根据您的技能设置执行此操作的两种方法.

>您可以创建sql CLR函数.

  1. [Microsoft.sqlServer.Server.sqlFunction(Name="fnToList",FillRowMethodName="FillRow",TableDefinition="ID NVARCHAR(1000)")]
  2. public static IEnumerable sqlArray(sqlString inputString,sqlString delimiter)
  3. {
  4. if (string.IsNullOrEmpty(delimiter.Value))
  5. return new string[1] { inputString.Value };
  6. return inputString.Value.Split(delimiter.Value.tocharArray(),StringSplitOptions.RemoveEmptyEntries);
  7. }
  8.  
  9. public static void FillRow(object row,out sqlString str)
  10. {
  11. str = new sqlString((string)row);
  12. }

或者……您可以创建常规sql函数

  1. CREATE FUNCTION [dbo].[fnArray] ( @Str varchar(8000),@Delim varchar(1) = ' ' )
  2. returns @tmpTable table ( arrValue varchar(25))
  3. as
  4. begin
  5. declare @pos integer
  6. declare @lastpos integer
  7. declare @arrdata varchar(8000)
  8. declare @data varchar(25)
  9.  
  10. set @arrdata = replace(replace(replace(replace(upper(@Str),@Delim,'|'),'-',''),'/','\','|')
  11. set @arrdata = @arrdata + '|'
  12. set @lastpos = 1
  13. set @pos = 0
  14. set @pos = charindex('|',@arrdata)
  15. while @pos <= len(@arrdata) and @pos <> 0
  16. begin
  17. set @data = substring(@arrdata,@lastpos,(@pos - @lastpos))
  18. if rtrim(ltrim(@data)) > ''
  19. begin
  20. if not exists( select top 1 arrValue from @tmpTable where arrValue = @data )
  21. begin
  22. insert into @tmpTable ( arrValue ) values ( @data )
  23. end
  24. end
  25. set @lastpos = @pos + 1
  26. set @pos = charindex('|',@arrdata,@lastpos)
  27. end
  28. return
  29. end

然后使用:

  1. SELECT * From Mydatabase Where Names in (select arrValue from dbo.fnArray(@Names,','))

猜你在找的MsSQL相关文章