相关疑难解决方法(0)

如何创建SQL Server函数以将子查询中的多行"连接"到单个分隔字段?

为了说明,假设我有两个表如下:

VehicleID Name
1         Chuck
2         Larry

LocationID VehicleID City
1          1         New York
2          1         Seattle
3          1         Vancouver
4          2         Los Angeles
5          2         Houston
Run Code Online (Sandbox Code Playgroud)

我想写一个查询来返回以下结果:

VehicleID Name    Locations
1         Chuck   New York, Seattle, Vancouver
2         Larry   Los Angeles, Houston
Run Code Online (Sandbox Code Playgroud)

我知道这可以使用服务器端游标完成,即:

DECLARE @VehicleID int
DECLARE @VehicleName varchar(100)
DECLARE @LocationCity varchar(100)
DECLARE @Locations varchar(4000)
DECLARE @Results TABLE
(
  VehicleID int
  Name varchar(100)
  Locations varchar(4000)
)

DECLARE VehiclesCursor CURSOR FOR
SELECT
  [VehicleID]
, [Name]
FROM [Vehicles]

OPEN VehiclesCursor

FETCH NEXT …
Run Code Online (Sandbox Code Playgroud)

sql sql-server string-concatenation

193
推荐指数
8
解决办法
13万
查看次数

使用SQL Server"FOR XML":将结果数据类型转换为Text/varchar/string是什么?

我现在已经挣扎了将近一周,仍然没有找到任何解决方案 - .-

我的目标是通过查询"FOR XML"语句从SQL Server接收XML,将此XML作为字符串/流转发到XSLT Transformer并将结果显示为HTML.

关于它的糟糕之处是我应该使用的Web服务器环境:IBM Domino 8.5.2,它通常使用Lotus Script和Lotus Notes数据库来生成网站.

但是现在Notes数据库的性能已经走到了死胡同,在谈论大型数据库时,比如我们的网站点击统计数据,这些数据库将数百万次点击存储为数据集.因此,我们决定迁移到mssql2008服务器,该服务器可以更快地提供自定义筛选结果.

我确实设法建立与SQL Server的连接,提交查询并将结果作为xml.但现在?:)似乎SQL Server提供了他的"for xml" - 结果作为一种自己奇怪的二进制编码字符数据类型,在打印它们或保存到文件时没有任何意义.Lotus Script(几乎是VBScript)似乎没有办法处理这个xml数据类型.

我尝试了各种方法,我可以找到结果 - Lotus构建在ODBC类,LCConnection通过OleDB,ADO连接通过OleDB ......但每次尝试都以一堆不可读的数据结束.

我可以想象多米诺骨牌和SQL Server之间的网络服务,将数据准备为我的多米诺骨牌脚本的字符串,但这是我想避免的不必要的开销.

你能在sql语句中告诉你想要生成的xml是什么数据类型吗?就像对于字段的cast()/ convert()而言,对于整个xml结果?这样我就可以将结果作为text/varchar字段读取?

谢谢,克里斯

xml sql-server lotus-domino

4
推荐指数
1
解决办法
2万
查看次数