我需要将varbinary(max)
数据类型转换为varchar(max)
。
这是我使用的陈述:
SELECT file = convert(varchar(max), [colFile]) FROM [myTable] where key = 1
这会返回截断的文字。
如果我理解正确,那是因为SELECT的输出会截断8000个字符。
我还检查了以下链接,他们解释了这个问题,但我不明白如何将它应用于我的案例。
Convert Binary Id Field to Text
How to store a string var greater than varchar(max)?
那么......我怎么能得到全文?
修改:
我刚刚按照评论中的建议进行了检查,显然文本没有被截断。这只是一个SSMS的事情。因此,问题似乎与运行SQL语句的服务有关。在这种情况下是一个R脚本。
R对来自SQL语句的输出有限制吗?
SqlCommand commandInsert = new SqlCommand();
commandInsert.Connection = con;
//
SqlCommand commandSelect= new SqlCommand();
commandSelect.Connection = con;
string sqlSelect = String.Format("select myfile = convert(varchar(max), {0}) from {1} where {2} = @fileId",
"FileData", "FileSample", "FileId");
commandSelect.CommandText = sqlSelect;
commandSelect.Parameters.Add(new SqlParameter("@fileId", 1));
var result = commandSelect.ExecuteReader();
if(result.HasRows)
{
StringBuilder builder = new StringBuilder();
while(result.Read())
{
builder.Append(result.GetString(0));
}
string output = @"./Data/Result.csv";
File.WriteAllText(output, builder.ToString());
}
//
con.Close();
R代码
> install.packages("RODBC")
> library("RODBC")
> odbcChannel <- odbcConnect("TestDB")
> sqlFetch(odbcChannel, "FileSample")
Error in odbcQuery(channel, query, rows_at_time) :
'Calloc' could not allocate memory (214748364800 of 1 bytes)
Además: Warning messages:
1: In odbcQuery(channel, query, rows_at_time) :
Reached total allocation of 8075Mb: see help(memory.size)
2: In odbcQuery(channel, query, rows_at_time) :
Reached total allocation of 8075Mb: see help(memory.size)
> dataFrame <- sqlQuery(odbcChannel, "select myfile = convert(varchar(max), FileData) from FileSample where FileId = 1")
> write.csv(dataFrame, file = "MyData.csv")
好吧,我读了一些关于R的内容(我没有涉及项目的那一部分,但问题是我想提供所有代码......)
这是一个非常基本的示例代码,其中使用RODBC库从SQL-Server获取数据,输出文件由先前已知的SQL语句生成。
该文件被截断。
它应该有1000行(144183个字符)。它只抛出442(64233个字符)
文件: in pastebin