دستور Bulk Insert در SQL Server برای وارد کردن حجم بالای دادهها
روش Bulk Insert (یا bcp) در SQL Server برای منتقل کردن حجم بالایی از دادهها (مانند فایلهای متنی یا CSV) به جداول یا View های SQL Server استفاده میشود . این فرمان شامل گزینههایی برای تعیین جداکننده ستونها (FIELDTERMINATOR)، پایان ردیف (ROWTERMINATOR)، و مشخصکردن شروع از ردیف خاص (FIRSTROW) است.
سینتکس پایه Bulk Insert
BULK INSERT نام_جدول
FROM 'مسیر_فایل'
WITH (
FIELDTERMINATOR = '،',
ROWTERMINATOR = '\n',
FIRSTROW = 2
);
نام_جدول: نام جدول یا View مقصد (میتواند بهصورت
db.schema.TableName
باشد.)مسیر_فایل: مسیر کامل فایل داده. میتواند مسیر محلی یا Azure Blob Storage باشد .
گزینههای WITH: برای تنظیم جزئیات فرمت و نحوه واردسازی دادهها استفاده میشوند.
مثال عملی
ایجاد دیتابیس و جدول نمونه:
CREATE DATABASE HR;
GO
USE HR;
CREATE TABLE Employees (
Id INT IDENTITY PRIMARY KEY,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL
);
فایل CSV نمونه (employees.csv
):
Id,First name,Last name
1,John,Doe
2,Jane,Doe
3,Lily,Bush
فرمان Bulk Insert:
BULK INSERT Employees
FROM 'D:\data\employees.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
FIRSTROW = 2
);
این فرمان از ردیف دوم شروع میکند تا رأس فایل نادیده گرفته شود.
گزینههای پیشرفته و تنظیمات
BATCHSIZE / KILOBYTES_PER_BATCH: تعیین تعداد ردیف یا حجم داده برای هر پیام به سرور (انتخاب تراکنش)
MAXERRORS: تعداد خطاهای مجاز پیش از توقف عملیات
CHECK_CONSTRAINTS: بررسی محدودیتها (CHECK/FOREIGN KEY) حین واردسازی
FIRE_TRIGGERS: اجرای تریگرها برای هر تراکنش
TABLOCK: اخذ قفل انحصاری برای جلوگیری از تداخل کاربری
CODEPAGE: تعیین صفحه کد برای پشتیبانی از یونیکد/UTF-8
DATAFILETYPE: نوع فایل (char, native, widechar).
DATA_SOURCE / FORMATFILE / ERRORFILE: برای واردسازی از Azure Blob Storage با استفاده از External Data Source، فایلهای فرمت یا خطایی
واردسازی به View به جای جدول
میتوان از View برای تطابق دقیق با اسکیمای فایل بهره برد:
CREATE VIEW SalesView AS
SELECT col1, col2, ... FROM dbo.Sales;
و سپس:
BULK INSERT SalesView
FROM 'C:\...csv'
WITH (...);
این کار امکان تطبیق دقیق تعداد ستونها را فراهم میکند.
مجوزها و مسائل امنیتی
نیاز به مجوزهای
INSERT
وADMINISTER BULK OPERATIONS
(در Azure: ADMINISTER DATABASE BULK)اگر فایل خارج از سرور SQL قرار دارد و با UNC آدرسدهی میشود، مجوزهای account فرآیند SQL (یا delegation ویندوز) باید تنظیم شده باشد .
برای اتصال به Azure Blob Storage، استفاده از SAS یا Managed Identity در Azure SQL ضروری است
جمعبندی و کاربردهای اصلی
مزیت | کاربرد |
---|---|
سرعت بالا | انتقال حجم زیاد داده در کوتاهترین زمان |
کنترل دقیق | با گزینههایی مانند BATCHSIZE، CODEPAGE، ERRORFILE |
پشتیبانی از منابع مختلف | فایلهای محلی، شبکهای، Azure Blob Storage |
دیدگاهتان را بنویسید