Вы можете сделать следующие шаги:
1) Разбить функцию для вашей разделенных запятыми строку:
CREATE FUNCTION [dbo].[Split] (
@InputString VARCHAR(8000),
@Delimiter VARCHAR(50)
)
RETURNS @Items TABLE (
Item VARCHAR(8000)
)
AS
BEGIN
IF @Delimiter = ' '
BEGIN
SET @Delimiter = ','
SET @InputString = REPLACE(@InputString, ' ', @Delimiter)
END
IF (@Delimiter IS NULL OR @Delimiter = '')
SET @Delimiter = ','
DECLARE @Item VARCHAR(8000)
DECLARE @ItemList VARCHAR(8000)
DECLARE @DelimIndex INT
SET @ItemList = @InputString
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
WHILE (@DelimIndex != 0)
BEGIN
SET @Item = SUBSTRING(@ItemList, 0, @DelimIndex)
INSERT INTO @Items VALUES (@Item)
SET @ItemList = SUBSTRING(@ItemList, @DelimIndex+1, LEN(@ItemList)[email protected])
SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
END
IF @Item IS NOT NULL
BEGIN
SET @Item = @ItemList
INSERT INTO @Items VALUES (@Item)
END
ELSE INSERT INTO @Items VALUES (@InputString)
RETURN
END
2) Создать процедуру, которая принимает в качестве параметра, разделенных запятыми. В этом примере я использую вашу фиксированную строку, но вы должны изменить ее, чтобы заставить ее работать с параметром. Примечание: Я принимаю во внимание, что таблица назначения всегда имеет 3 столбца и что строка, разделенная запятыми, имеет длину, равную 3 всегда. Вы должны адаптировать процедуру, если это изменение ...
/* Get the length of the comma separated string */
DECLARE @ITEM_COUNT INT
SELECT @ITEM_COUNT = COUNT(*) FROM
(
SELECT item
FROM Split('"AccountType","contains","Customer","Balance","equals",250,"FirstName","like","John"',',')
) N
declare @x int
set @x = 1
/* Insert in your table every 3 columns... */
WHILE (@x < @ITEM_COUNT)
BEGIN
insert into test
select /* pivoting the sub-query */
fieldname = max(case when seq = @x then item end),
fieldcondition = max(case when seq = @x + 1 then item end),
fieldvalue = max(case when seq = @x + 2 then item end)
from
(
SELECT item
,row_number() OVER (ORDER BY (SELECT 1)) AS seq
FROM Split('"AccountType","contains","Customer","Balance","equals",250,"FirstName","like","John"',',')
) a
set @x = @x + 3
END
Надеется, что это помогает
Извините @ ling.s в моем случае есть три поля в таблице, и я не могу принять постоянное значение. – Shamim
Создайте хранимую процедуру, чтобы использовать следующую команду, чтобы разбить строку и вставить ее в таблицу. http://stackoverflow.com/questions/702968/how-do-i-expand-comma-separated-values-into-separate-rows-using-sql-server-2005 – SteveB