Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

oddziel wartości oddzielone przecinkami i przechowuj w tabeli na serwerze sql

Będziesz musiał utworzyć funkcję podziału podobną do tej:

create FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1))       
returns @temptable TABLE (items varchar(MAX))       
as       
begin      
    declare @idx int       
    declare @slice varchar(8000)       

    select @idx = 1       
        if len(@String)<1 or @String is null  return       

    while @idx!= 0       
    begin       
        set @idx = charindex(@Delimiter,@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)       
        else       
            set @slice = @String       

        if(len(@slice)>0)  
            insert into @temptable(Items) values(@slice)       

        set @String = right(@String,len(@String) - @idx)       
        if len(@String) = 0 break       
    end   
return 
end;

Następnie w swojej procedurze składowanej wywołasz funkcję, która podzieli Twój ciąg:

ALTER PROCEDURE [dbo].[spInsertDistributionRuleListType]
(
  @Rule_ID int,
  @ListType_ID int,
  @Values VARCHAR(MAX)=NULL
)
AS
BEGIN

    INSERT INTO DistributionRule_x_ListType (Rule_ID, ListType_ID, Value)
    SELECT @Rule_ID, @ListType_ID, items
    FROM [dbo].[Split] (@Values, ',')  -- call the split function 

END

Gdy wykonasz procedurę składowaną, podzieli ona wartości i wstawi wiele wierszy do tabeli:

exec spInsertDistributionRuleListType 1, 2, '319,400,521,8465,2013';

Zobacz SQL Fiddle z wersją demonstracyjną. Spowoduje to wstawienie następującego wyniku:

| RULE_ID | LISTTYPE_ID | VALUE |
---------------------------------
|       1 |           1 |    10 |
|       1 |           2 |   319 |
|       1 |           2 |   400 |
|       1 |           2 |   521 |
|       1 |           2 |  8465 |
|       1 |           2 |  2013 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj APP_NAME(), aby uzyskać nazwę aplikacji bieżącej sesji w SQL Server

  2. Dołączanie do tabeli na podstawie wartości oddzielonych przecinkami

  3. Pobierz dzień roku z daty w SQL Server (T-SQL)

  4. Czy mogę uzyskać nazwy wszystkich tabel bazy danych SQL Server w aplikacji C#?

  5. Kiedy muszę używać początku/końca bloków i słowa kluczowego Go w programie SQL Server?