我正在使用该RODBC
程序包从数据库查询文本列。该数据库基于Microsoft SQL Server 2008
R2构建。SQL中列的数据类型为nvarchar(max)
。
但是,当我运行时:
# Set up ODBC connection to CCWEB5 production server
# Note: default database is set to "CCSalary"
ccweb5.prod <- odbcConnect("ccweb5")
# Read in some job ad text
job.text <- sqlQuery(ccweb5.prod,"
SELECT TOP 100
ja.JobTitle,
ja.JobText as 'JobText',
LEN(ja.JobText) as 'JobTextLength'
FROM JobStore.dbo.JobAd as ja (NOLOCK)
")
在SQL中,我期望(对于第一行):
JobTitle JobText JobTextLength
IT Field Service Technician <text goes here...> 2742
但是,当我这样做时: nchar(as.character(job.text[1,2]))
它返回: 255 。
所以我的问题是,是什么导致了这种截断,我该如何避免呢?谢谢!!
好的,看来我已经找到了解决方法。经过更多Google搜寻后,我发现:
SQL Native Client
ODBC驱动程序要考虑的一件事是VARCHAR(MAX)没有固定的大小,而ODBC驱动程序通过返回最大列大小0来表示此大小。如果不检查其大小,这可能会使您的应用程序感到困惑特殊情况下为0。
请参阅本文的底部:http :
//msdn.microsoft.com/zh-
cn/library/ms130896.aspx但是,总的来说,我在任何.NET应用程序中都没有看到这种情况,因为它在ADO中得到了正确处理。网。
来源:http://bytes.com/topic/sql-server/answers/808461-cannot-read-varchar-
max
因此,就我而言,以下方法可以解决问题:
job.text <- sqlQuery(ccweb5.prod,"
SELECT DISTINCT TOP 100
ja.JobTitle,
[JobText] = CAST(ja.JobText AS varchar(8000)), -- note the data-type re-cast
[JobTextLength] = LEN(ja.JobText)
FROM JobStore.dbo.JobAd as ja (NOLOCK)
")
这样,nchar(as.character(job.text[1,2]))
现在将返回 2742 (应有的结果)。
我在StackOverflow上没有看到任何类似的问题,所以我将其保留。希望这对某人有帮助!
问题内容: 是否可以将SQL Server 2008数据库中的列类型从更改为,而不必删除表并重新创建? 每当我尝试使用SQL Server Management Studio进行操作时,SQL Server Management Studio都会向我抛出一个错误-但是让我头疼的是,很高兴知道我是否可以更改类型而不必删除和创建。 谢谢 问题答案: 您应该能够使用TSQL做到这一点。 就像是
问题内容: 我正在尝试在hibernate状态下使用mysql 字符串函数,但不幸的是我无法使用它,甚至无法通过创建这些注册函数来尝试 使用mysqldialect但没有人在工作..任何人都可以告诉我如何在hibernate状态下使用mysql字符串函数。或对上述寄存器功能的任何更改。 提前致谢, 最好的问候,拉贾。 问题答案: 通过扩展mysqldialect来创建一个类,如下所示 } 并在查询
问题内容: 我试图使用Hibernate从Java调用Oracle9i DB中的遗留存储函数。该函数的声明如下: 经过几次失败的尝试和广泛的谷歌搜索之后,我在Hibernate论坛上发现了该线程,该线程建议了如下映射: 我执行它的代码是 结果日志是 任何提示我在做什么错?还是调用此存储函数的更好方法? 更新: 尝试@axtavt的建议时,出现以下错误: 该函数确实进行了大量的插入/更新,因此我想运
问题内容: 在为应用程序构建架构时遇到一个问题。 何时使用和。我的意思是应该使用它的确切用例。我也曾在网上冲浪,但我能够得到确切的答案。 任何人都可以提出一些确切的用例。 问题答案: 这是针对Microsoft SQL Server的 : 是 Unicode- 每个字符2个字节,因此最大。10亿个字符;可以处理东亚语,阿拉伯语,希伯来语,西里尔字母等字符。 就是 非Unicode -每个字符1个字
我需要使用convert二进制函数更新一列,但它抛出了一个错误。 这是我的疑问: 这就是错误: 参数数据类型varbinary(max)对于convert函数的参数3无效。 我是SQL的初学者——我错过了什么?
问题内容: 我正在尝试使用课程表重叠的教室,我的桌子是:课程: 日程: 课堂: 我的SQL是: 我得到: 但是我只需要显示count的所有最大值(目前只有1条这样的行)。我试过了 而是返回空表。怎么了?或者,也许是另一种解决方案的建议,以获得我所需要的? 问题答案: 以下将返回与最大计数匹配的所有组 SQL小提琴