如果不存在主键,则批量插入

时间:2017-06-07 17:41:39

标签: sql-server iis bulkinsert exists

我使用批量插入来获取.txt文件并将其导入SQL Server数据库。

该表定义为:

CREATE TABLE dbo.server1 
(
    [DATE] [VARCHAR] (16) NULL,
    [TIME] [VARCHAR] (16) NULL,
    [s-ip] [VARCHAR] (16) NULL,
    [cs-method] [VARCHAR] (8) NULL, 
    [cs-uri-stem] [VARCHAR] (255) NULL,
    [cs-uri-query] [VARCHAR] (2048) NULL,
    [s-port] [VARCHAR] (4) NULL,
    [s-username] [VARCHAR] (50) NULL,
    [c-ip] [VARCHAR] (16) NULL,
    [cs(User-Agent)] [VARCHAR] (1024) NULL,
    [cs(Cookie)] [VARCHAR] (1024) NULL,
    [cs(Referer)] [VARCHAR] (4096) NULL, 
    [sc-STATUS] [INT] NULL,
    [sc-substatus] [INT] NULL,
    [sc-win32-STATUS] [INT] NULL,
    [sc-bytes] [DECIMAL] NULL,
    [cs-bytes] [DECIMAL] NULL,
    [time-taken] [INT] NULL,
)

批量插入

BULK INSERT dbo.server1
FROM 'C:\Users\User\Desktop\log.txt'
WITH (
     FIRSTROW = 2,
     FIELDTERMINATOR = ' ',
     ROWTERMINATOR = '\n'
)

.txt文件看起来像(IIS Log)

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2017-05-31 00:00:00
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Cookie) cs(Referer) sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
2017-05-31 00:00:00 ::1 POST /support/webservice/BatchService.asmx - 80 - ::1 Mozilla/4.0+(compatible;+Win32;+WinHttp.WinHttpRequest.5) - - 401 2 5 6765 629 2
2017-05-31 00:05:15 ::1 POST /support/webservice/BatchService.asmx - 80 AD\wmisbatch ::1 Mozilla/4.0+(compatible;+Win32;+WinHttp.WinHttpRequest.5) - - 200 0 0 734 820 314898
2017-05-31 01:00:00 ::1 POST /support/webservice/BatchService.asmx - 80 - ::1 Mozilla/4.0+(compatible;+Win32;+WinHttp.WinHttpRequest.5) - - 401 2 5 6765 629 1

我的问题是我没有主键,需要检查整行是否存在。我没有插入具体的值,因为我已经找到了很多两个例子。我问的原因是因为我可能想要手动或预定运行bulk insert而不想要重复数据。

当我没有主键或插入特定值时,执行not exists或过程的最佳方法是什么?

我有一个使用Union和临时表的解决方案,但我想尽可能避免这种情况。

0 个答案:

没有答案