我使用master.dbo.xp_cmdshell以下列方式将txt / csv文件加载到SQL Server:
CREATE TABLE #tempoutput
(
result_id [int] IDENTITY(1,1) NOT NULL,
result VARCHAR(MAX)
)
INSERT INTO #tempoutput(result)
EXEC @rcode = master.dbo.xp_cmdshell TYPE c:\test.csv
问题是虽然结果列定义为VARCHAR(MAX),但当我尝试使用标题:
SELECT top 1 @result=result
FROM #Tempoutput
我只能获取255个字符,任何理由?以及如何能够获取所有行直到CRLF
谢谢!
答案 0 :(得分:0)
结果确实包含所有数据,它只是在#tempoutput
表中分成多行255个字符。 (删除TOP 1以查看所有行)
INSERT INTO #tempoutput(result)
EXEC @rcode = master.dbo.xp_cmdshell "TYPE c:\ReallyBig.csv"
SELECT * FROM #tempoutput; -- You'll see the extra rows
如果您需要将所有行重新组合回单个VARCHAR(MAX),则需要使用您最喜欢的GROUP_CONCAT黑客。由于您已经在使用xp_cmdshell
,因此您可能无限制地访问您的服务器,因此为什么不安装CLR aggregate function like this example usage才能做到这一点 - IMO这个更易读而不是FOR XML ... STUFF
黑客。