指定SELECT*时的传输级错误

Tom*_*Tom 2 sql t-sql sql-server

以下查询不起作用,并产生错误:

从服务器接收结果时发生传输级错误

SELECT 
    * 
FROM 
    table1 a, 
    table2 b, 
    table3 c 
WHERE 
    a.location = b.location AND 
    b.location = c.location AND 
    a.id = c.id AND 
    a.entry = ''34690''
Run Code Online (Sandbox Code Playgroud)

虽然此查询有效:

SELECT 
    a.location, 
    a.id, 
    a.entry, 
    c.desc, 
    b.name 
FROM 
    table1 a, 
    table2 b, 
    table3 c 
WHERE 
    a.location = b.location AND 
    b.location = c.location AND 
    a.id = c.id AND 
    a.entry = ''34690''
Run Code Online (Sandbox Code Playgroud)

我需要从所有表中选择几乎所有内容(大约100个项目),但是我真的需要在结果集中指定我需要的每一列吗?

Mik*_*scu 5

尽管*在编写客户端SELECT查询时避免使用限定符通常是一种很好的做法,但可能有一些原因导致它可能无法正常工作:

  • 您正在使用的SQL Server产品,或您正在使用的驱动程序不支持在单个查询中检索那么多(100)列.
  • 您尝试获取的所有列的总大小大于支持的最大列(最有可能是驱动程序) - 如果某些列属于大型数据类型且包含大量数据(如许多列),则可能会发生这种情况VARCHAR(MAX)或TEXT列
  • 或者您的服务器和客户端之间实际上可能存在网络连接不良 - 您应该通过在服务器上本地执行查询来验证这一点.

编辑

好的,所以问题似乎是其中一列包含大约1000个字符的文本.绕过那一个?

您是否尝试运行查询以仅返回导致问题的一列?如果您有自己的工作但导致完整查询失败,您可以尝试运行两个查询.一个用于获取其余列,另一个用于获取剩余的一列.然后在您的客户端中,重新组合信息..如果您确实使用此路线,则必须确保包含用于识别两个查询中的每个记录的任何唯一标识符,以便您可以映射回长文本 - 列到每条记录的其余信息.