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

指定ORDER BY子句时,为什么SQL Server忽略字符串连接中的值

郎玮
2023-03-14
问题内容

我有下表

Created    Comment
2010/10/10 Text1 
2010/11/11 Text2
2010/12/12 Text3

我需要将所有注释收集到单个字符串中

SELECT  @Comment = COALESCE(@Comment, '')
   + CHAR(13) + CHAR(10) + CONVERT(NVARCHAR(30), [dbo].[Comment].[Created], 101) + ': ' + ISNULL([Comment].[Text], '')
    FROM Comment

如果不订购,则按预期方式工作,最后返回所有您的注释。但是在运行以下代码后,添加ORDER BY 子句:

SELECT  @Comment = COALESCE(@Comment, '')
   + CHAR(13) + CHAR(10) + CONVERT(NVARCHAR(30), [Created], 101) + ': ' + ISNULL([Text], '')
    FROM Comment
  ORDER BY Created

仅返回最后一条评论。有谁知道为什么ORDER BY导致串联的奇怪结果?

PS:如果使用 FOR XML 子句代替串联,则可以很好地工作。是否有一种方法可以创建SQL
Server函数,以将子查询中的多行“填充”到单个定界字段中?


问题答案:

因为您依赖未记录的行为。

Microsoft说“未定义聚合级联查询的正确行为。
”。如果计算标量移到计划中的错误位置,则它将停止工作!



 类似资料:
  • 问题内容: 我正在将Visual Studio 2017 for Mac与dotnet Core和EF Core一起使用。在Docker容器中设置mssql映像后,我试图添加连接字符串,但抛出连接错误。我尝试使用不同的选项(例如ip地址,容器名称,主机名等)作为服务器名称,但是它们都不起作用。 带有容器名称 主机名: 通过在终端中使用本地主机进行连接时,其成功连接 但是在运行应用程序时,连接失败。

  • 我正在尝试使用以下命令从现有的PostgreSQL数据库生成模型: 它通过尝试连接到主机来“工作”一次,但由于无法访问端口5432而失败。 我修复了网络问题,现在端口已打开,但连接字符串中的< code>Host被忽略,我得到的错误是: 28000:无pg_hba。主机“my.public.ip.address”、用户“postgres”、数据库“my-db”的conf条目,SSL关闭 我不知道为

  • 我想使用下面的连接器配置将多个表数据发布到同一个Kafka主题,但我看到了下面的异常 例外 原因:io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException:正在注册的架构与早期架构不兼容;错误代码:409 连接器似乎忽略了主题策略属性集,并继续使用旧的${主题}-key和${主题}-value主题。 连

  • 问题内容: String a = “devender”; String b = “devender”; String c = “dev”; String d = “dev” + “ender”; String e = c + “ender”; a 和 b 都指向字符串常量池中的同一String Literal。所以在情况1 应该在内部使用类似- a 和 d 如何指向同一参考而不是 a & e ?

  • 问题内容: 我可以猜测浏览器已针对最新版本进行了优化,但是如何做到这一点呢?我们可以说串联字符串时最好使用吗? 更新资料 因此,在现代浏览器中,对字符串串联进行了优化,因此使用符号比要 串联 字符串时使用符号要快。 但是@Arthur指出,如果您实际上想使用分隔符连接字符串,则速度会更快。 问题答案: 浏览器字符串优化已更改了字符串串联图片。 Firefox是第一个优化字符串连接的浏览器。从1.0

  • 有个老项目使用的是 ASP+SQL Server,今天把它迁移到新服务器上去。 于是就在新服务器上安装好 IIS 和 SQL Server,就把老服务器上的数据给迁移过来。结果发现 ASP 死活连接不上数据库,检查后发现数据库正常、ASP 也正常,但是就是连接不上。提示找不到数据库 ODBC 什么的…… 后来百度一下说需要在 ODBC 数据源管理中新建一个用户 DSN,照做后正常了。 为什么不是像