2016-01-29 2 views
0

У меня есть этот раскол функции:После разделения строки нужно вставить, чтобы столбец таблицы

CREATE FUNCTION SplitString 
    (@Input NVARCHAR(MAX), 
    @Character CHAR(1)) 
RETURNS @Output TABLE (Item NVARCHAR(1000)) 
AS 
BEGIN 
    DECLARE @StartIndex INT, @EndIndex INT 

    SET @StartIndex = 1 

    IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character 
    BEGIN 
     SET @Input = @Input + @Character 
    END 

    WHILE CHARINDEX(@Character, @Input) > 0 
    BEGIN 
     SET @EndIndex = CHARINDEX(@Character, @Input) 

     INSERT INTO @Output(Item) 
      SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1) 

     SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input)) 
    END 

    RETURN 
END 
GO 

Я хочу использовать эту функцию в хранимой процедуре, процедура делает вставку:

INSERT INTO table1 (KEY, description) 
VALUES (SELECT Ident_current('table2'), 
     SELECT item FROM webreports.Splitstring('A','B','C')) 

Таблица целей состоит из двух столбцов Key и Description. Столбец Key получен из другой таблицы столбцов идентификаторов, а столбец Description должен быть вставлен из результата функции, подстроки.

Эта процедура не работает должным образом.

ответ

2

Нет необходимости использовать VALUES:

INSERT INTO table1 ([key], descrption) 
SELECT 
    IDENT_CURRENT('table2'), 
    item 
FROM dbo.SplitString('A,B,C', ',') 

Как примечание стороны, ваша SplitString функция не является оптимальным. Вы должны делать это скорее на основе набора, чем RBAR. Аарон Бертран написал статью о разных способах разделения строк. Вы можете прочитать его here.

+0

Отлично! спасибо за ваше быстрое решение – SivaRajini

+1

@SivaRajini Пожалуйста, подумайте о замене функции 'SplitString'. –

+0

Несомненно. Благодарю вас. – SivaRajini

Смежные вопросы