xquery中exist函数变量代替问题,巨变态

liclin 2006-12-29 01:06:20
declare @GroupName nvarchar(30)
declare @xml xml

set @GroupName = '同事'
set @xml = N'
<Userlist>
<Group Value="同事">
<User ID="6F9619FF-8B86-D011-B42D-00C04FC964FF">
<UserName>TT</UserName>
<Phone>13819185363</Phone>
</User>
<User ID="6F9619FF-8B86-D011-B42D-00C04FC964F1">
<UserName>YY</UserName>
<Phone>13507878345</Phone>
</User>
</Group>
<Group Value="MM">
<User ID="342354234324">
<UserName>若若</UserName>
<Phone>13852332443</Phone>
</User>
</Group>
</Userlist>
'

select @xml.exist(N'/Userlist/Group[(@Value cast as xs:string?) eq xs:string("同事")]
')
-------
精确查询时可以正常返回,可是要把“同事”替换成变量却找不到方法。
select @xml.exist(N'/Userlist/Group[@Value="同事"]') 这个精确查询也可以
下面的方法替换变量都不行,请帮帮忙。
select @xml.exist(N'/Userlist/Group[@Value="{@GroupName}"]')--变量不起作用
select @xml.exist(N'/Userlist/Group[@Value="{sql:variable("@GroupName")}"]')--提示错误
...全文
299 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rookie_one 2006-12-29
  • 打赏
  • 举报
回复
帮顶一下。

sql语句中的变量调用时候,如果是在拼串之中,需要''+变量名+''
liclin 2006-12-29
  • 打赏
  • 举报
回复
自己顶下!!!
liclin 2006-12-29
  • 打赏
  • 举报
回复
想偷懒下都不行,用动态SQL才可以搞定,不知道还有没别的方法
declare @GroupName nvarchar(30)
declare @xml xml

set @GroupName = '同事'
set @xml = N'
<Userlist>
<Group Value="同事">
<User ID="6F9619FF-8B86-D011-B42D-00C04FC964FF">
<UserName>TT</UserName>
<Phone>13819185363</Phone>
</User>
<User ID="6F9619FF-8B86-D011-B42D-00C04FC964F1">
<UserName>YY</UserName>
<Phone>13507878345</Phone>
</User>
</Group>
<Group Value="MM">
<User ID="342354234324">
<UserName>若若</UserName>
<Phone>13852332443</Phone>
</User>
</Group>
</Userlist>
'
declare @stmt nvarchar(4000)
set @stmt= 'select @xml.exist(''/Userlist/Group[@Value="'+@GroupName+'"]'')'
exec sp_executesql @stmt,N'@xml xml'
,@xml

--------------
返回1
liclin 2006-12-29
  • 打赏
  • 举报
回复
不好意思,上面的@stmt中一个</User>写成</UserName>了,完整的应该是下面
试过select @xml.exist(N'/Userlist/Group[@Value="'+@GroupName+N'"]')也不可以
下面的问题也想用变量代替,也碰到相应的问题:

declare @GroupName nvarchar(50)
declare @UserID nvarchar(36)
declare @UserName nvarchar(50)
declare @Phone nvarchar(20)
declare @stmt nvarchar(1000)

set @GroupName = 'GG'
set @UserID = '34526343434'
set @UserName = 'hehe'
set @Phone = '13853435345'
set @stmt = '
<Group Value="'+@GroupName+'">
<User ID="'+@UserID+'">
<UserName>'+@UserName+'</UserName>
<Phone>'+@Phone+'</Phone>
</User>
</Group>
'
declare @xml xml
set @xml = N'
<Userlist>
<Group Value="同事">
<User ID="6F9619FF-8B86-D011-B42D-00C04FC964FF">
<UserName>TT</UserName>
<Phone>13819185363</Phone>
</User>
<User ID="6F9619FF-8B86-D011-B42D-00C04FC964F1">
<UserName>YY</UserName>
<Phone>13507878345</Phone>
</User>
</Group>
<Group Value="MM">
<User ID="342354234324">
<UserName>若若</UserName>
<Phone>13852332443</Phone>
</User>
</Group>
</Userlist>
'
--这个想用@stmt代替不可,提示“xml 数据类型方法 "modify" 的参数 1 必须是字符串文字。”
set @xml.modify(
N'Insert '+@stmt+'
as last
into (/Userlist)[1]')
--下面注释部分使用可以
--set @xml.modify
-- (N'
-- insert
-- <Group Value="{sql:variable("@GroupName")}">
-- <User ID="{sql:variable("@UserID")}">
-- <UserName>{sql:variable("@UserName")}</UserName>
-- <Phone>{sql:variable("@Phone")}</Phone>
-- </User>
-- </Group>
-- as last
-- into (/Userlist)[1]')
select @xml
liclin 2006-12-29
  • 打赏
  • 举报
回复
试过select @xml.exist(N'/Userlist/Group[@Value="'+@GroupName+N'"]')也不可以
下面的问题也想用变量代替,也碰到相应的问题:

declare @GroupName nvarchar(50)
declare @UserID nvarchar(36)
declare @UserName nvarchar(50)
declare @Phone nvarchar(20)
declare @stmt nvarchar(1000)

set @GroupName = 'GG'
set @UserID = '34526343434'
set @UserName = 'hehe'
set @Phone = '13853435345'
set @stmt = '
<Group Value="'+@GroupName+'">
<User ID="'+@UserID+'">
<UserName>'+@UserName+'</UserName>
<Phone>'+@Phone+'</Phone>
</UserName>
</Group>
'
declare @xml xml
set @xml = N'
<Userlist>
<Group Value="同事">
<User ID="6F9619FF-8B86-D011-B42D-00C04FC964FF">
<UserName>TT</UserName>
<Phone>13819185363</Phone>
</User>
<User ID="6F9619FF-8B86-D011-B42D-00C04FC964F1">
<UserName>YY</UserName>
<Phone>13507878345</Phone>
</User>
</Group>
<Group Value="MM">
<User ID="342354234324">
<UserName>若若</UserName>
<Phone>13852332443</Phone>
</User>
</Group>
</Userlist>
'
--这个想用@stmt代替不可,提示“xml 数据类型方法 "modify" 的参数 1 必须是字符串文字。”
set @xml.modify(
N'Insert '+@stmt+'
as last
into (/Userlist)[1]')
--下面注释部分使用可以
--set @xml.modify
-- (N'
-- insert
-- <Group Value="{sql:variable("@GroupName")}">
-- <User ID="{sql:variable("@UserID")}">
-- <UserName>{sql:variable("@UserName")}</UserName>
-- <Phone>{sql:variable("@Phone")}</Phone>
-- </User>
-- </Group>
-- as last
-- into (/Userlist)[1]')
select @xml
内容概要:本文聚焦于分布式传感器网络的LEACH(Low-Energy Adaptive Clustering Hierarchy)聚类算法,系统研究其在能量消耗建模与网络生命周期优化方面的性能表现,并结合Matlab代码实现完整的仿真分析流程。研究深入剖析LEACH协议的核心机制,即通过周期性选举簇头节点实现能量负载的均衡分布,从而有效延长网络整体生存时间。内容涵盖传感器节点部署优化、通信能耗模型构建、路由策略设计及能量耗尽过程的动态模拟,重点解决传统LEACH算法存在的簇头分布不均、能耗集于特定区域等缺陷。文档不仅提供了LEACH及其改进算法的仿真案例,还拓展至智能优化算法、机器学习、信号处理等多学科交叉应用方向,体现了该研究在物联网、边缘计算和无线传感网络领域的广泛适用性与科研价值。; 适合人群:具备一定编程基础和科研能力,熟悉Matlab仿真环境,从事无线传感器网络、物联网、智能优化算法等相关领域的研究生或科研人员。; 使用场景及目标:①用于无线传感器网络能量高效路由协议的设计与优化;②通过Matlab仿真实现LEACH算法及其改进版本的性能对比分析;③支撑科研论文复现、算法验证与教学演示;④为分布式系统的能耗均衡问题提供解决方案参考。; 阅读建议:建议读者按照文档提供的目录结构系统学习,重点关注LEACH算法的核心机制与能量模型构建,结合所提供的Matlab代码进行仿真实践,并参考网盘资源的完整案例以加深理解。同时可拓展至其他优化算法与通信协议的研究,提升综合科研能力。

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧