Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Chèn hàng loạt bằng quy trình được lưu trữ

Không có gì sai với mã thủ tục đã lưu trữ của bạn - vấn đề là:BULK INSERT lệnh không thể chấp nhận tên tệp là một biến.

Điều này hoạt động:

BULK INSERT ZIPCodes 
FROM  'e:\5-digit Commercial.csv' 
WITH 

nhưng điều này không bao giờ hoạt động - trong một proc được lưu trữ hoặc không:

DECLARE @filename VARCHAR(255)
SET @filename = 'e:\5-digit Commercial.csv' 

BULK INSERT ZIPCodes 
FROM @filename
WITH 

Vì vậy, bạn chỉ không thể làm theo cách này, thật không may. Bạn có thể cân nhắc xây dựng BULK INSERT của mình câu lệnh dưới dạng một chuỗi (với tên tệp cố định) và sau đó thực thi nó dưới dạng SQL động - nhưng tôi thực sự không thấy giải pháp nào khác.

DECLARE @filepath nvarchar(500)
SET @filepath = N'e:\5-digit Commercial.csv'

DECLARE @bulkinsert NVARCHAR(2000)

SET @bulkinsert = 
       N'BULK INSERT ZIPCodes FROM ''' + 
       @filepath + 
       N''' WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'')'

EXEC sp_executesql @bulkinsert


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ON [PRIMARY] có nghĩa là gì?

  2. Các cách khác nhau để so sánh lược đồ và dữ liệu bảng SQL Server

  3. Cách hàm CHAR () hoạt động trong SQL Server (T-SQL)

  4. Chỉ định tên cột làm tham số trong câu lệnh SELECT?

  5. Tránh trùng lặp trong truy vấn CHÈN VÀO CHỌN trong SQL Server