TSQL在splitstring上插入多个

时间:2013-11-22 15:41:59

标签: sql sql-server tsql

我目前正在使用tsql split strings函数,如下所示:

USE [local]
GO
/****** Object:  UserDefinedFunction [dbo].[splitstring]    Script Date: 11/22/2013    
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[splitstring] ( @stringToSplit VARCHAR(MAX) )
RETURNS
 @returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN

 DECLARE @name NVARCHAR(255)
 DECLARE @pos INT

 WHILE CHARINDEX(',', @stringToSplit) > 0
 BEGIN
  SELECT @pos  = CHARINDEX(',', @stringToSplit)  
  SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)

  INSERT INTO @returnList 
  SELECT @name

  SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
 END

 INSERT INTO @returnList
 SELECT @stringToSplit

RETURN
 END

这允许我传递一串数据,如:狗,猫,老鼠,猪

它在表格中生成下面的输出。

enter image description here

从这一点开始,我想为传递的每个标记和表中的标记运行一个insert语句。

--INSERT  INTO Tags_Accounts (data, dataType, dataLocation, tag, whoAdded, whenAdded)
    --VALUES                         (@dbData, @dbDataType, @location, @tags, @ntid, GETDATE());

这是我可以访问表数据但不确定如何在每次存在时运行插入数据的方法。

SELECT * FROM dbo.splitstring(@tags)

在这种情况下,它将运行4个插入语句,因为临时表中有4个标记。

我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

假设@dbData返回的每一行的所有其他变量(@dbDataType@location@ntid[dbo].[splitstring])都相同应该工作:

INSERT INTO Tags_Accounts 
    (data, dataType, dataLocation, tag, whoAdded, whenAdded)
SELECT 
    @dbData, @dbDataType, @location, Name, @ntid, GETDATE() 
FROM dbo.splitstring (@tags);