[color=blue][b]for xml path 語句的應用[/b][/color]
大家都知道在sql server中利用 for xml path 語句能夠把查詢的資料生成xml資料,下面是它的一些應用示例。
declare @temptable table(userid int , username nvarchar(50));
insert into @temptable (userid,username) values (1,'a')
insert into @temptable (userid,username) values (2,'b')
select userid,username from @temptable for xml path
執行這段指令碼,將生成如下結果:
1a
2b
select userid,username from @temptable for xml path('lzy')
再次執行上述指令碼,將生成如下的結果:
1a
2b
可以看到節點變成,其實path() 括號內的引數是控制節點名稱的,這樣的話大家可以看一下如果是空字串(不是沒有引數)會是什麼結果?
select userid,username from @temptable for xml path('')
執行上面這段指令碼將生成結果:
1a2
b
這樣就不顯示上級節點了,大家知道在 path 模式中,列名或列別名被作為 xpath 表示式來處理,也就是說,是列的名字,這樣大膽試驗一下不給指定列名和別名會是怎麼樣?
select cast(userid as varchar) + '',username + '' from @temptable for xml path('')
執行上面這句將生成結果
1a2b
select cast(userid as varchar) + ',',username + '',';' from @temptable for xml path('')
生成結果
1,a;2,b;
select '' from @temptable for xml path('')
生成結果
還可以生成其他格式,大家可以根據自己需要的格式進行組合。
declare @t1 table(userid int , username nvarchar(50),cityname nvarchar(50));
insert into @t1 (userid,username,cityname) values (1,'a','上海')
insert into @t1 (userid,username,cityname) values (2,'b','北京')
insert into @t1 (userid,username,cityname) values (3,'c','上海')
insert into @t1 (userid,username,cityname) values (4,'d','北京')
insert into @t1 (userid,username,cityname) values (5,'e','上海')
select b.cityname,left(userlist,len(userlist)-1) from (
select cityname,
(select username+',' from @t1 where cityname=a.cityname for xml path('')) as userlist
from @t1 a
group by cityname
) b
生成結果(每個城市的使用者名稱)
北京 b,d
上海 a,c,e
**:[url]
SQL Server2005複製實現
一 準備工作 1 在發布伺服器上建立乙個共享目錄,作為發布快照檔案的存放目錄。例如 在d 盤根目錄下建資料夾名為pub 2 設定sql 發布伺服器和訂閱伺服器均設定 步驟 開啟服務 控制面板 管理工具 服務 右擊sqlserver agent 屬性 登入 選擇 此帳戶 輸入或選擇第一步中建立的win...
SQL Server 2005完全解除安裝
sql server 2005的解除安裝是乙個非常頭疼的問題。我曾經嘗試過直接使用 新增或刪除程式 工具解除安裝 清除安裝目錄 刪除登錄檔內容等等各種方式綜合解除安裝,勉強成功。現在終於找到了乙個事半功倍的方法,多次嘗試,未有失敗,具體如下 第一種是微軟官方提供的工具 msicuu2.exe 微軟官...
SQLSERVER 2005 遞迴查詢
專案中有使用者組表usergroup如下 其中pid表示當前組的上級組 表資料如下 現在想查詢出頂級組 沒有上級組叫頂級組 a1組的所有子孫組id,sql如下 查詢子節點 with rtd1 as select id pid from usergroup rtd2 as select from rt...