Как массово вставить в таблицу в SQL Server 2005 - PullRequest
1 голос
/ 18 сентября 2009

У меня есть сохраненный процесс, который принимает поле ntext, в которое передаются некоторые записи. Предположим, что есть таблица t, как показано ниже.

| ID | Name | Designation|
--------------------------
| 1  | ABC  | Team leader|
| 2  | DEF  | Developer  |
| 3  | XYZ  | Manager    |

Я отправляю еще две записи как '4 | Tom | Developer; 5 | Джон | Руководитель группы; ' Приведенная выше строка содержит значения столбца, разделенные '|' и строки разделены ';'. Итак, если я передаю строку в качестве параметра типа ntext для сохраненного процесса и мне нужно вставить строки в таблицу, то как это сделать?

Как лучше всего реализовать массовую вставку в таблицу в SQL Server 2005?

1 Ответ

1 голос
/ 18 сентября 2009

Вы смотрели Bulk Insert tsql примеры из файла (можете ли вы сначала сохранить в файл?

BULK INSERT AdventureWorks.Sales.SalesOrderDetail
   FROM 'f:\orders\lineitem.tbl'
   WITH 
      (
         FIELDTERMINATOR =' |',
         ROWTERMINATOR =' |\n'
      )

В противном случае вам придется разделить строки, зациклить их и разделить поля

используйте расщепление как

CREATE FUNCTION [dbo].[SplitString]
(
        @String VARCHAR(MAX) ,
        @Delimiter  VARCHAR(10)
)
RETURNS @RetTable TABLE(
        String varchar(MAX)
)
AS 
BEGIN
    DECLARE @i INT ,
            @j INT
    SELECT  @i = 1
    WHILE @i <= LEN(@String)
    BEGIN
        SELECT  @j = CHARINDEX(@Delimiter, @String, @i)
        IF @j = 0
        BEGIN
            SELECT  @j = LEN(@String) + 1
        END
        INSERT  @RetTable SELECT SUBSTRING(@String, @i, @j - @i)
        SELECT  @i = @j + LEN(@Delimiter)
    END
    RETURN
END

Хотя, это всегда будет кошмарный уход.

...