可以通过只读访问权限将csv数据读入SQL Server / SSMS

时间:2019-08-28 21:03:13

标签: sql-server csv import ssms

我是SQL Server的新手,所以这里可能缺少核心概念。我正在尝试对包含约2,000条记录的.CSV文档进行LEFT JOIN,这是从具有数百万条记录的SQL Server数据库表中合并而成的。我只有读取权限,所以(我认为)我无法创建表或数据库。在Python或R中,我会将数据作为变量读入,但是我所看到的有关使用SQL Server处理.CSV数据的所有事情都指示我将其添加为数据库中的表。

由于没有我的许可,这里是否有解决方法?无论如何,这不是我真正想要的表。而且,如果可能的话,我想避免首先导出包含数百万条记录的表。如果那很重要,我正在使用SSMS 18.2。

2 个答案:

答案 0 :(得分:1)

您可以尝试将CS​​V导入到#temptable中,然后加入到您的临时表中。关闭连接后,临时表将消失。问题是如何创建和填充临时表,以及是否可以获得这样做的权利。

您拥有什么权限?如果您具有批量插入(通过BulkAdmin服务器角色),则即使数据库中只有db_datareader,也可以创建一个临时表并将CSV导入其中。很好的例子:https://blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into-sql-server-using-bulk-insert-load-comma-delimited-file-into-sql-server/

/* Save this to C:\temp\testfile.csv:
1,James,Smith,19750101
2,Meggie,Smith,19790122
3,Robert,Smith,20071101
4,Alex,Smith,20040202
*/
CREATE TABLE #CSVTest
(
ID INT,
FirstName VARCHAR(40),
LastName VARCHAR(40),
BirthDate smalldatetime
)

BULK INSERT #CSVTest
FROM 'c:\temp\testfile.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO

您还可以使用OpenRowset(此版本的某些版本)读取CSV和其他文件:

select *
from openrowset('MSDASQL'
,'Driver={Microsoft Access Text Driver (*.txt, *.csv)}'
,'select * from C:\Test.CSV')

,但是这里经常也存在安全问题。

您还可以尝试使用Access:将CSV导入表中,然后链接到SQL表中。但是我不知道一百万行的连接是否会很好地工作,如果您的DBA减慢了速度,您可能会接到DBA的电话。

最简单的方法是查看他们是否将授予您BulkAdmin角色。

答案 1 :(得分:0)

您可以执行以下SQL查询:

{{1}}