我目前正在使用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
这允许我传递一串数据,如:狗,猫,老鼠,猪
它在表格中生成下面的输出。
从这一点开始,我想为传递的每个标记和表中的标记运行一个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个标记。
我怎么能这样做?
答案 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);