Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在将节点插入SQL 2008 xml数据类型。。。首先检查它是否存在_Sql_Xml_Database_Tsql_Sql Server 2008 - Fatal编程技术网

正在将节点插入SQL 2008 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

目前我正在通读大量的文章以帮助我。。只是似乎有这么多的选择,似乎找不到一个干净的解决方案。。这可能是非常基本的,所以要提前道歉

所以我在SQL2008中有一个XML字段。它基本上包含以下内容:

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