当前位置: 首页 > 面试题库 >

RODBC sqlQuery()应返回varchar(MAX)时返回varchar(255)

伯逸明
2023-03-14
问题内容

我正在使用该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小提琴