我正在尝试从SQL查询(SQL Server 2005)中读取文本文件,但根本没有任何运气。我用EXEC和xp_cmdshell尝试了各种各样的东西,但都没有用。这是我试图解决这个问题的一般方法:
CREATE TABLE temp (data varchar(2000));
INSERT temp EXEC master.dbo.xp_cmdshell 'type file.txt';
然后我尝试从临时表中选择数据。我经常搜索,我不知道自己错了什么。帮助
答案 0 :(得分:39)
你的文本文件是什么样的?每行记录一次?
你必须查看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'
)
似乎在我的测试环境中工作正常: - )
答案 1 :(得分:39)
刚刚发现了这个:
SELECT * FROM OPENROWSET(BULK N'<PATH_TO_FILE>', SINGLE_CLOB) AS Contents
它会将文件内容作为varchar(max)引入。将SINGLE_CLOB
替换为:
SINGLE_NCLOB
SINGLE_BLOB
为varbinary(max)
感谢http://www.mssqltips.com/sqlservertip/1643/using-openrowset-to-read-large-files-into-sql-server/为此!
答案 2 :(得分:0)
您是需要执行此操作,还是作为正常数据库操作的一部分(即响应触发器,预定事件等)?
无论哪种方式,您最好创建一个SSIS包。
我没有使用过dbo.xp_cmdshell(根据你的例子),但我认为捕获输出是个问题。
答案 3 :(得分:0)
如果您想一次将文件读入表中,则应使用BULK INSERT。另一方面,如果您预先逐行解析文件以进行自己的检查,则应该查看此Web:https://www.simple-talk.com/sql/t-sql-programming/reading-and-writing-files-in-sql-server-using-t-sql/您可能需要激活xp_cmdshell或其他OLE自动化功能。简单的谷歌和脚本将出现。 希望有用。
答案 4 :(得分:-2)
BULK INSERT dbo.temp
FROM 'c:\temp\file.txt' --- path file in db server
WITH
(
ROWTERMINATOR ='\n'
)
它适用于我,但是通过editplus保存为多语言的ansi编码