使用TYPE(通过sqlserver 2008)命令将缓冲区大小限制为255

时间:2014-12-22 08:33:31

标签: sql-server windows sql-server-2008 cmd

我使用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

谢谢!

1 个答案:

答案 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黑客。