Существует обходной путь, который я пробовал для аналогичного случая.
Шаг 1: Создайте таблицу со столбцами, доступными для вашего файла CSV / TXT.
Шаг 2: Передать данные с помощью сценария BCP.
bcp dbo.<tablename> in <file location in local folder> -S <server_name> -d <database_name> -U <username> -P <password> -b 20000 -q -c -t"<column delimiter>"
Шаг 3: Как только данные станут доступны в вашей целевой таблице, вы можете теперь изменить таблицу с помощьюприведенная ниже команда SQL:
ALTER TABLE <Table Name>
ADD <Identity Column> BIGINT IDENTITY(1,1)
Добавление нескольких операторов SQL, чтобы помочь вам понять сценарий обновления-вставки для добавочной нагрузки.
CREATE TABLE Employees
(
ID INT IDENTITY(1,1),
Name VARCHAR(100),
Salary INT,
InsertDate DATETIME,
UpdateDate DATETIME
)
INSERT INTO Employees
VALUES
('Kristeen',1420,NULL,NULL)
,('Ashley',2006,NULL,NULL)
,('Julia',2210,NULL,NULL)
,('Maria',3000,NULL,NULL)
CREATE PROCEDURE dbo.InsertOrUpdateEmployee
@Name VARCHAR(100),
@Salary INT
AS BEGIN
CREATE TABLE #tmpData
(
Name VARCHAR(50),
Salary INT
)
INSERT INTO #tmpData(Name,Salary)
VALUES(
@Name,
@Salary
)
UPDATE A
SET A.Name = B.Name,
A.Salary = B.Salary,
A.updatedate = GETDATE(),
A.IsNewRecord = 0
FROM Employees A
JOIN #tmpData B
ON A.Name = B.Name
AND A.Salary = B.Salary
INSERT INTO Employees
(
Name,
Salary,
InsertDate,
IsNewRecord
)
SELECT
S.Name,
S.Salary,
GETDATE(),
1
FROM #tmpData S
LEFT JOIN Employees D
ON S.Name = D.Name
AND S.Salary = D.Salary
WHERE D.Name IS NULL
AND D.Salary IS NULL
DROP TABLE #tmpData
END
EXEC InsertOrUpdateEmployee 'Gaurav',4500000
Вам необходимо изменитьбит с приведенным выше кодом, так как приведенный выше код предназначен для вставки данных через параметр SP, но в вашем случае вам может понадобиться использовать исходную таблицу вместо временной таблицы, и в конце вы можете обрезать исходную таблицу после перемещениязаполните данные в таблице назначения.