你好!今天,我学习了for xml path
在mssql中连接字符串的技术。由于我从未在mssql中使用过xml,而google却没有帮助,所以我需要问你。
让我们想象一下默认情况。我们需要连接表中的一些字符串:
declare @xmlRepNames xml = (
select
', [' + report_name + ']'
from (
select distinct
report_order,
report_name
from #report
) x
order by
report_order
for xml path(''), type)
select
stuff((select @xmlRepNames.value('.', 'nvarchar(max)')), 1, 1, '')
所以我得到这样的东西:
[str1], [str2], [strn]
好的。它工作正常。但是我有两个非常相似的连接块。区别只是结果字符串看起来像这样:
[str1], [str2], [strn]
和
isnull([str1], 0) as [str1], isnull([str2], 0) as [str2], isnull([strn], 0) as [strn]
因此,我可以使用不同的字符串构造函数编写2个非常相似的代码块(已经完成,btw),或尝试将先前的代码扩展为具有包含2种构造函数的xml变量,然后按xml节点类型进行连接。在做第二种方式时,我遇到了一些问题-
我这样写:
declare @xmlRepNames xml = (
select
', [' + report_name + ']' as name,
', isnull([' + report_name + '], 0) as [' + report_name + ']' as res
from (
select distinct
report_order,
report_name
from #report
) x
order by
report_order
for xml path(''), type)
select
stuff((select @xmlRepNames.value('/name', 'nvarchar(max)')), 1, 1, ''),
stuff((select @xmlRepNames.value('/res', 'nvarchar(max)')), 1, 1, '')
但这会引发错误"XQuery [value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'"
。
例如,要替换'/name'
为to'/name[1]'
或任何其他替换,'/name[x]'
将仅返回第x个“名称”记录,而不是所有串联的“名称”记录。
[问题] :是否可以像我想要的那样解决问题的第二种方式,如果可能的话该如何解决?
[免责声明] :这个问题现在对我来说并不十分严重(第一种方法有点难看,但还可以),但是如何克服似乎很有趣:)谢谢!
您的子查询不能返回两个值。如果只想连接字符串,则根本不需要xml
数据类型。您可以stuff()
在单个语句中执行and子查询:
declare @Rep1Names nvarchar(max) = (
stuff((select ', [' + report_name + ']' as name
from (select distinct report_order, report_name
from #report
) x
order by report_order
for xml path('')
)
), 1, 1, '');
declare @Rep2Names nvarchar(max) = (
stuff(select ', isnull([' + report_name + '], 0) as [' + report_name + ']' as res
from (select distinct report_order, report_name
from #report
) x
order by report_order
for xml path('')
)
), 1, 1, '');
问题内容: 如何在bash中的文件路径中检查字符串?我在尝试: 用路径中的冒号(:)替换所有正斜杠。没用 Bash将文件路径字符串视为文件路径,并引发错误“无此类文件或目录”。目的是将文件路径视为字符串。 例如:filePathVar可能是 ** / myloc / src / File.java 在这种情况下,检查应返回true。 请注意,作为构建步骤,我正在Jenkins作业中编写此脚本。 以
我正在尝试将我上传到Tomcat的文件的路径存储到我的MySQL数据库中。我已经存储了名为filepath的字符串的路径,但是当我执行程序时,我收到了以下错误: “您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在第1行的':\User\Nick\Desktop\bot.png)'附近使用的正确语法”我使用的代码的一部分: 我想问题与路径的格式有关,但我对java很陌生,所以我
我使用以下代码通过Windows窗体“浏览”功能选择文件夹,然后将该路径传递到gci cmdlet 但我得到了这些错误: 在 C:\测试\合并图片2.ps1:17 字符:13 $Child = gci Move-Item:无法将参数绑定到参数“Path ”,因为它为空。在C:\ Test \ Combine pics 2 . PS1:19 char:43 Foreach($ Item in $ C
斜杠的数目可以是任意数目。如何在java中规范化路径,比如:
问题内容: 以下语句, 产生输出。 但是,以下内容 产生。 区别在哪里? 问题答案: 您会因为操作符优先级和字符串转换的结合而看到此行为。 JLS 15.18.1 指出: 如果只有一个操作数表达式的类型为String,则对另一操作数执行字符串转换(第5.1.11节),以在运行时生成字符串。 因此,第一个表达式中的右侧操作数将隐式转换为字符串: 但是对于第二个表达式,必须将复合赋值运算符与一起考虑。