我正在尝试从 SQL 查询(SQL Server 2005)中读取文本文件,但一点运气都没有。我用 EXEC 和 xp_cmdshell 尝试了各种方法,但都不起作用。这是我试图解决这个问题的一般方法:
CREATE TABLE temp (data varchar(2000));
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt';
然后我尝试从临时表中选择数据。我已经搜索了很多,但我不知道我做错了什么。帮助?
我正在尝试从 SQL 查询(SQL Server 2005)中读取文本文件,但一点运气都没有。我用 EXEC 和 xp_cmdshell 尝试了各种方法,但都不起作用。这是我试图解决这个问题的一般方法:
CREATE TABLE temp (data varchar(2000));
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt';
然后我尝试从临时表中选择数据。我已经搜索了很多,但我不知道我做错了什么。帮助?
刚发现这个:
SELECT * FROM OPENROWSET(BULK N'<PATH_TO_FILE>', SINGLE_CLOB) AS Contents
它将文件的内容作为 varchar(max) 拉入。替换SINGLE_CLOB
为:
SINGLE_NCLOB
对于 nvarchar(max)
SINGLE_BLOB
对于 varbinary(max)
感谢http://www.mssqltips.com/sqlservertip/1643/using-openrowset-to-read-large-files-into-sql-server/!
你的文本文件是什么样的?每行一个记录?
您必须查看BULK INSERT语句 - 它应该类似于:
BULK INSERT dbo.YourTableName
FROM 'D:\directory\YourFileName.csv'
WITH
(
CODEPAGE = '1252',
FIELDTERMINATOR = ';',
CHECK_CONSTRAINTS
)
在这里,就我而言,我正在导入一个 CSV 文件 - 但您也应该能够导入一个文本文件。
来自 MSDN 文档 - 这是一个示例,希望适用于每行一个字段的文本文件:
BULK INSERT dbo.temp
FROM 'c:\temp\file.txt'
WITH
(
ROWTERMINATOR ='\n'
)
似乎在我的测试环境中工作得很好:-)
如果您想一次将文件读入表中,则应使用 BULK INSERT。另一方面,如果您更愿意逐行解析文件以进行自己的检查,您应该看看这个网站:https ://www.simple-talk.com/sql/t-sql-programming/reading -and-writing-files-in-sql-server-using-t-sql/您可能需要激活 xp_cmdshell 或其他 OLE 自动化功能。简单的谷歌它,脚本就会出现。希望有用。
BULK INSERT dbo.temp
FROM 'c:\temp\file.txt' --- path file in db server
WITH
(
ROWTERMINATOR ='\n'
)
它对我有用,但通过editplus保存为多语言的ansi编码