Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 server 这会回滚/停止插入所有记录吗?_Sql Server_Sql Server 2005_Linq To Sql_Stored Procedures_Openxml - Fatal编程技术网

Sql server 这会回滚/停止插入所有记录吗?

Sql server 这会回滚/停止插入所有记录吗?,sql-server,sql-server-2005,linq-to-sql,stored-procedures,openxml,Sql Server,Sql Server 2005,Linq To Sql,Stored Procedures,Openxml,我一直在学习这个教程 他们制作了一个像这样的SP CREATE PROCEDURE [dbo].[spTEST_InsertXMLTEST_TEST](@UpdatedProdData nText) AS DECLARE @hDoc int exec sp_xml_preparedocument @hDoc OUTPUT,@UpdatedProdData INSERT INTO TBL_TEST_TEST(NAME) SELECT XMLProdTable.NAME

我一直在学习这个教程

他们制作了一个像这样的SP

CREATE PROCEDURE [dbo].[spTEST_InsertXMLTEST_TEST](@UpdatedProdData nText)
AS 
 DECLARE @hDoc int   

 exec sp_xml_preparedocument @hDoc OUTPUT,@UpdatedProdData 

 INSERT INTO TBL_TEST_TEST(NAME)
 SELECT XMLProdTable.NAME
    FROM OPENXML(@hDoc, 'ArrayOfTBL_TEST_TEST/TBL_TEST_TEST', 2)   
       WITH (
                ID Int,                 
                NAME varchar(100)
            ) XMLProdTable

EXEC sp_xml_removedocument @hDoc
现在我的需求要求我一个接一个地批量插入和批量更新。因此,首先我想知道是否可以将它们合并到一个SP中?我不确定它是如何处理这个OPENXML的,但我认为它只是确保XPath是正确的


接下来,当它运行这个组合SP时会发生什么,并且出现了一些问题。它会回滚所有记录,还是只是停止并插入在此崩溃事件之前发生的记录?

事务是原子的。要么提交所有插入的记录,要么回滚所有记录。语句将始终作为事务的一部分进行更新。所以这个插入要么全部提交,要么回滚,不插入行att all

在SQL2005中,应该避免使用NTEXT类型和OPENXML。它们不完善,而且NTEXT实际上已被弃用,还有更好的替代方案:

  • 使用而不是NTEXT
  • 使用而不是OPENXML:

create procedure usp_insertxml (@data xml)
as
begin
  insert into table (id, name)
  select x.value('ID', 'INT'),
    x.value('NAME', 'varchar(100)')
  from @data.nodes('ArrayOfTBL_TEST_TEST/TBL_TEST_TEST') t(x);
end