正在将节点插入SQL 2008 xml数据类型。。。首先检查它是否存在
目前我正在通读大量的文章以帮助我。。只是似乎有这么多的选择,似乎找不到一个干净的解决方案。。这可能是非常基本的,所以要提前道歉 所以我在SQL2008中有一个XML字段。它基本上包含以下内容:正在将节点插入SQL 2008 xml数据类型。。。首先检查它是否存在,sql,xml,database,tsql,sql-server-2008,Sql,Xml,Database,Tsql,Sql Server 2008,目前我正在通读大量的文章以帮助我。。只是似乎有这么多的选择,似乎找不到一个干净的解决方案。。这可能是非常基本的,所以要提前道歉 所以我在SQL2008中有一个XML字段。它基本上包含以下内容: 14等等 我希望做的是将一个参数传递到一个proc中,以插入一个不存在的值 因此,与其先读取xml,然后在.NET代码中执行此操作,不如在存储的proc/t-sql中有一种干净的方法来执行此操作 感谢您的帮助!我相信这是一个相当普遍的问题 使用该方法的示例: 声明 @x xml, @参数int SET@x
14
等等
我希望做的是将一个参数传递到一个proc中,以插入一个不存在的值
因此,与其先读取xml,然后在.NET代码中执行此操作,不如在存储的proc/t-sql中有一种干净的方法来执行此操作
感谢您的帮助!我相信这是一个相当普遍的问题 使用该方法的示例:
声明
@x xml,
@参数int
SET@x='123'
设置@param=1
如果不存在(
从@x.nodes('/root/id')n(x)中选择*其中x.value('.','int')=@param
)
打印“插入”
其他的
打印“返回”
您可以在XML上使用.exist()
XQuery函数来确定给定节点是否存在
这是一篇关于如何使用各种XQuery函数的好文章。在该页面的中间,您将看到以下部分:
使用exist方法
exist方法采用XPath
选择单个节点的表达式
在XML文档中,并返回
如果节点
存在或False(位值0)(如果存在)
没有。如果源列是
类型化xml列(在这种情况下
必须在数据库中声明命名空间
查询),并且元素包含null,
该方法返回NULL。所以
XQuery:
如果有产品,将返回True
id值为“304”(产品
属性id为“304”的元素,
否则为假。您也可以使用
的WHERE子句中的exist方法
SQL语句:
哇,非常好的清晰答案。。非常感谢。现在只是看看。。但非常感谢您花时间回复!非常感谢。正如对另一个答案所提到的,非常感谢您如此完整的回答。我们现在将检查答案并作出回应。谢谢
DECLARE
@x xml,
@param int
SET @x = '<root><id>1</id><id>2</id><id>3</id></root>'
SET @param = 1
IF NOT EXISTS (
SELECT * FROM @x.nodes('/root/id') n(x) WHERE x.value('.','int') = @param
)
PRINT 'Insert'
ELSE
PRINT 'Return'
SELECT MyXml.exist('(/root/product[@id="304"])[1]' FROM MyTable
SELECT column1, column2, column3 FROM MyTable
WHERE MyXml.exist('(/root/product[@id="304"])[1]') = 1