Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Процедура с IN параметър

2 начина да направите това въз основа на вашия набор от умения.

  1. Можете да създадете SQL CLR функция.

    [Microsoft.SqlServer.Server.SqlFunction(Name="fnToList", FillRowMethodName="FillRow", TableDefinition="ID NVARCHAR(1000)")]
    public static IEnumerable SqlArray(SqlString inputString, SqlString delimiter)
    {
        if (string.IsNullOrEmpty(delimiter.Value))
            return new string[1] { inputString.Value };
        return inputString.Value.Split(delimiter.Value.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
    }
    
    public static void FillRow(object row, out SqlString str)
    {
        str = new SqlString((string)row);
    }
    

Или... можете да създадете обикновена SQL функция:

CREATE FUNCTION [dbo].[fnArray] ( @Str varchar(8000), @Delim varchar(1) = ' ' )
returns  @tmpTable table ( arrValue varchar(25))
as
begin
   declare @pos integer
   declare @lastpos integer
   declare @arrdata varchar(8000)
   declare @data varchar(25)

   set @arrdata = replace(replace(replace(replace(upper(@Str),@Delim,'|'),'-',''),'/','|'),'\','|')
   set @arrdata = @arrdata + '|'
   set @lastpos = 1
   set @pos = 0
   set @pos = charindex('|', @arrdata)
   while @pos <= len(@arrdata) and @pos <> 0
   begin
      set @data = substring(@arrdata, @lastpos, (@pos - @lastpos))
      if rtrim(ltrim(@data)) > ''
      begin
         if not exists( select top 1 arrValue from @tmpTable where arrValue = @data )
         begin   
            insert into @tmpTable ( arrValue ) values ( @data )
         end
      end
      set @lastpos = @pos + 1
      set @pos = charindex('|', @arrdata, @lastpos)
   end
   return 
end

След това да използвате:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Имам нужда от списък с държави в T-SQL

  2. ИЗБЕРЕТЕ свързани статии въз основа на ключови думи от една таблица

  3. SQL сортиране на числови низове след разделяне

  4. Риск от сблъсък на UUID, използвайки различни алгоритми

  5. „Фатална грешка при вътрешна връзка“ при изпълнение на собствено компилирана съхранена процедура в SQL Server 2019 (известен бъг)