如何将字符串数据按行插入到临时表中 [英] how to insert string data into a temp table rowwise

查看:65
本文介绍了如何将字符串数据按行插入到临时表中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



如何将字符串数据插入表变量中

例如:string =''41,21,23,25''

我想将上述ID插入表变量中,如下所示

ID
41
21
23
25

解决方案

 创建  FUNCTION  DBO.FUN_SPLIT
(
 @ DATA   VARCHAR ( 2000 ),
 @ SEP   VARCHAR ( 5 )
)
返回  @ TEMP   TABLE (ID  INT   IDENTITY ( 1  NVARCHAR ( AS 
/*   ************************ ****************************************************** ***********测试:选择*来自DBO.FUN_SPLIT('A,B,C',',')
****************************************************** ****************************************/
开始
声明  @ CNT   INT 
 SET   @ CNT  =  1 
白色(CHARINDEX( @ SEP  @ DATA )> 0)
开始
插入  INTO   @ TEMP (数据)
选择 DATA = LTRIM(RTRIM(SUBSTRING( @ DATA  1 ,CHARINDEX( @ SEP  @ DATA )-1))))
 SET   @ DATA  = SUBSTRING( @ DATA  ,CHARINDEX( @ SEP  @ DATA )+ 1,LEN( > @DATA ))
 SET   @ CNT  =  @ CNT  +  1 
 END 
插入  INTO   @ TEMP (数据)
选择 DATA = LTRIM(RTRIM( @ DATA ))
返回 


END



希望对您有帮助.如果有帮助,请投票.
谢谢


这里有四种方法可以做到这一点:

http://博客. msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-string-to-table.aspx [ set ANSI_NULLS ON 设置 QUOTED_IDENTIFIER >打开 转到 创建 功能 [dbo].[fn_Splitter]( @ ID Varchar ( 100 ))) 返回 @ Tbl_IDs (ID Int ) As 开始 - 附加逗号 设置 @ IDs = @ IDs + ' ,' - 保持搜索位置的索引 声明 @ Pos1 Int 声明 @ pos2 Int - 从第一个字符开始 设置 @ Pos1 = 1 设置 @ Pos2 = 1 @ Pos1< len( @ ids ) 开始 设置 @ Pos1 = CharIndex(' ,' @ IDs @ Pos1 ) 插入 @ Tbl_IDs 选择 Cast(子字符串( @ IDs @ Pos2 ,@ Pos1- @ Pos2) Int ) - 转到下一个非逗号字符 设置 @ Pos2 = @ Pos1 + 1 - 从下一个字符开始搜索 设置 @ Pos1 = @ Pos1 + 1 结束 返回 结束




现在,您的存储过程应该是这样的

  ALTER  功能 [dbo].[Check_MemberIDCombination]
 (
   @ Ids   VARCHAR ( 1000 )
  )
 返回  VARCHAR ( 20 )
 AS 
开始
 
 DECLARE   @ Msg   VARCHAR ( 20 );
声明  @ count   int 
 
 选择 @Ids =(选择 转换( varchar ,Id)+ ' ,' 来自((<选择 ID 来自 dbo.Fn_Splitter( @ Ids ))) as  tmp 通过 ID   xml路径('  '))
选择 @ Ids =子字符串( @ Ids  1 ,Len( @ Ids ))


声明  @ Computing  (id  nvarchar ( 1000 ),Member_Id  nvarchar ( 1000 ))
插入 插入  @ computing 
选择 ID,子字符串(Applicant_Member_Ids, 1 ,len(Applicant_Member_Ids)-1)选择 ID,
    (选择 转换( varchar ,Applicant_Member_Id) + ' ,'  as  [文本()] 来自 Savings_Account_Applicant 其中 ID = saa .ID 订单 通过 Applicant_Member_Id   xml路径(' ')) as  Applicant_Member_Ids
    来自 Savings_Account_Applicant saa
     通过 ID
) as  Savings_Account  ORDER   BY  ID
 
设置  @ count  =( select  count( *)来自  @ Computing  其中 Member_Id = @Ids)

如果 @ count> 0
开始

  SET   @ Msg  = ' 已经存在
结束
 ELSE 
 开始
  SET   @ Msg  = ' 可用'
 
 END 
返回  @ Msg 
结束 



祝您编码愉快!
:)


hi,

how to insert string data into a table variable

ex: string= ''41,21,23,25''

i want to insert the above ID into a table variable as below

ID
41
21
23
25

CREATE FUNCTION DBO.FUN_SPLIT
(
	@DATA VARCHAR(2000),	
	@SEP VARCHAR(5)
)  
RETURNS @TEMP TABLE (ID INT IDENTITY(1,1), DATA NVARCHAR(100)) 
AS  
/************************************************************************************** TESTING			:   SELECT * FROM DBO.FUN_SPLIT('A,B,C',',')
**************************************************************************************/
BEGIN 	
	DECLARE @CNT INT	
	SET @CNT = 1	
	WHILE (CHARINDEX(@SEP,@DATA)>0)
	BEGIN		
		INSERT INTO @TEMP (DATA)		
		SELECT	DATA = LTRIM(RTRIM(SUBSTRING(@DATA,1,CHARINDEX(@SEP,@DATA)-1)))		
		SET @DATA = SUBSTRING(@DATA,CHARINDEX(@SEP,@DATA)+1,LEN(@DATA))		
		SET @CNT = @CNT + 1	
	END		
	INSERT INTO @TEMP (DATA)	
	SELECT DATA = LTRIM(RTRIM(@DATA))	
	RETURN


END



I hope this will help u. If helped Vote it.
Thanks


here are four approaches to do the same:

http://blogs.msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-string-to-table.aspx[^]


Create this function in your database

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
CREATE Function [dbo].[fn_Splitter] (@IDs Varchar(100) )  
Returns @Tbl_IDs Table  (ID Int)  As  
Begin 
 -- Append comma
 Set @IDs =  @IDs + ',' 
 -- Indexes to keep the position of searching
 Declare @Pos1 Int
 Declare @pos2 Int
  -- Start from first character 
 Set @Pos1=1
 Set @Pos2=1
 While @Pos1<len(@ids)
 Begin
  Set @Pos1 = CharIndex(',',@IDs,@Pos1)
  Insert @Tbl_IDs Select  Cast(Substring(@IDs,@Pos2,@Pos1-@Pos2) As Int)
  -- Go to next non comma character
  Set @Pos2=@Pos1+1
  -- Search from the next charcater
  Set @Pos1 = @Pos1+1
 End 
 Return
End




Now Your Store procedure should be like this

ALTER FUNCTION [dbo].[Check_MemberIDCombination]
 (
  @Ids VARCHAR(1000)
  ) 
 RETURNS VARCHAR(20)
AS 
BEGIN
 
DECLARE @Msg VARCHAR(20);
declare @count int
 
select @Ids=(select convert(varchar,Id) + ',' from ((select Id from dbo.Fn_Splitter(@Ids))) as tmp order by Id for xml path (''))
select @Ids= substring(@Ids,1,Len(@Ids))


DECLARE @Computed table(id nvarchar(1000),Member_Id nvarchar(1000))
insert into @computed
select ID, substring(Applicant_Member_Ids,1,len(Applicant_Member_Ids)-1) from
(
    select ID ,
    (select convert(varchar, Applicant_Member_Id) + ',' as [text()] from Savings_Account_Applicant where ID =saa.ID order by Applicant_Member_Id for xml path('')) as Applicant_Member_Ids
    from Savings_Account_Applicant saa
    group by ID
) as Savings_Account ORDER BY ID
 
set @count = ( select count(*) from @Computed where Member_Id=@Ids)

if @count>0
begin

 SET @Msg = 'Already Exists'
end 
ELSE
 begin
 SET @Msg = 'Available'
 
END
RETURN @Msg 
end



Happy Coding!
:)


这篇关于如何将字符串数据按行插入到临时表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆