如何在SELECT FOR XML查询中选择返回的列名?
技术问答
463 人阅读
|
0 人回复
|
2023-09-14
|
MS SQL提供了一种方便的解决方法,可将多行中的列值连接为一个值:& P9 r+ b! }8 J- S
SELECT col1- j. ]6 ]/ t( g% s, D9 ]
FROM table1
0 a0 b; p6 g# d! A WHERE col2 = 'x'
3 R: f. ~: T3 T2 ? ORDER by col3) s8 `+ w$ p2 d5 A) ]# v
FOR XML path('')+ s" s- }- x' d1 Z3 i5 x
并返回一个不错的记录集:
# g2 x! i+ B' k0 S; T' F JXML_F52E2B61-18A1-11d1-B105-00805F49916B \- s% Y) U& l( ?) j T# x
----------------------------------------
: ~' u, y0 t5 YFooBar
. c. ~. J+ c) K' j+ Q) k% b0 |/ {; u仅返回的记录集中的列名非常讨厌!6 Y2 M6 l4 Z( |4 v. H$ Z; L
列名似乎包含随机元素(或GUID),因此我不愿意在我的应用程序中使用它(不同的实例或不同的服务器可能具有另一个GUID)。不幸的是,我无法使用*来选择值,并且由于现有应用程序中的限制,我也无法遍历返回的列…
/ m) x: m- u. i. o; U; C& Q有没有一种方法可以将返回的记录集中的列名强制为更明智的方法?
3 l+ q: c& h, A 4 \3 x, Q. {. q, ?3 E1 p4 c
解决方案:* s% g# z( q# P
, D7 `* b0 I. `
* t. z1 y6 ]( _7 X. c; k/ C5 I& J3 ]3 B) S3 v! z
那应该做:
% X, o& j/ N5 B+ J* t3 fselect(
+ ] l, x5 d7 Y' GSELECT col14 u/ D& n# x! V3 E
FROM table1$ E% a2 A# g8 m8 b. U0 F5 @
WHERE col2 = 'x'9 @7 z9 O4 N& l+ V
ORDER by col3
1 D' m- S6 n5 J# P FOR XML path('')4 y N4 p! y4 f2 K
) as myName
. D8 X2 y5 }7 I0 Z. z, Y7 `不太漂亮,但应提供所需的结果 |
|
|
|
|
|