Sql server 这会回滚/停止插入所有记录吗?
我一直在学习这个教程 他们制作了一个像这样的SPSql 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
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