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

отделете стойности, разделени със запетая, и съхранявайте в таблица в sql сървър

Ще трябва да създадете функция за разделяне, подобна на тази:

create FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1)) връща @temptable TABLE (items varchar(MAX)) като начало декларира @idx int declare @slice. varchar(8000) изберете @idx =1, ако len(@String)<1 или @String е нула, връщане, докато @idx!=0 начало set @idx =charindex(@Delimiter,@String) ако @idx!=0 set @ slice =left(@String,@idx - 1) else set @slice =@String if(len(@slice)>0) вмъкнете в @temptable(Items) стойности(@slice) set @String =right(@String, len(@String) - @idx) ако len(@String) =0 прекъсване край връщане край; 

След това във вашата съхранена процедура ще извикате функцията за разделяне на низа ви:

ПРОЦЕДУРА ЗА ПРОМЕНИ [dbo].[spInsertDistributionRuleListType]( @Rule_ID int, @ListType_ID int, @Values ​​VARCHAR(MAX)=NULL)ASBEGIN INSERT INTO DistributionRule_x_ListType (Rule_ID, ValidType_SELECT @Rupe_SELECT @Rupe_ID @Rupe_Type) , елементи FROM [dbo].[Split] (@Values, ',') -- извикайте функцията split END 

Когато изпълните съхранената процедура, тя ще раздели стойностите и ще вмъкне множеството редове във вашата таблица:

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

Вижте SQL Fiddle с демонстрация. Това ще вмъкне следния резултат:

<предварителен код>| RULE_ID | LISTTYPE_ID | СТОЙНОСТ |--------------------------------| 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. SQL Server тригери:DML тригери

  2. Включете липсващите месеци в заявката за група по

  3. SQL Server Group по брой дата и час на час?

  4. SQL Server:максималният брой редове в таблицата

  5. Клауза VALUES в SQL Server