跟进此事。我能找到的最接近解决方案的方法是手动输入逗号分隔值,首先格式化所有行,然后运行如下:
DECLARE @TempTable table(firstcol varchar(50))
INSERT INTO @TempTable VALUES ('mystring1')
INSERT INTO @TempTable VALUES ('mystring2')
INSERT INTO @TempTable VALUES ('mystring3')
INSERT INTO @TempTable VALUES ('mystring4')
...
SELECT * FROM @TempTable WHERE firstcol NOT IN (SELECT tablecol FROM [MyTable])
如果我有一个更大的版本(2012 年?),我似乎也可以这样做:
INSERT INTO @TempTable VALUES('mystring1'),('mystring2'),('mystring3')
虽然仍在写入数据库,但我能找到的最接近的其他替代方案是:
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
select TerritoryID
,TotalSales
,TotalCost
INTO CSVImportTable
from openrowset('MSDASQL'
,'Driver={Microsoft Access Text Driver (*.txt, *.csv)}'
,'select * from C:\csvtest.CSV')
在这里找到:How to create and populate a table in a single step as part of a CSV import operation?
还有一个临时表的替代方案:
CREATE TABLE #TempTable (FName nvarchar(max),SName nvarchar(max),
Email nvarchar(max));
BULK INSERT #TempTable
FROM 'C:\52BB30AD694A62A03E.csv'
WITH (FIELDTERMINATOR = ',',ROWTERMINATOR = '\n')
在这里找到:Whats wrong with this SQL statement for table variable bulk insert