如果我在单extern int i;
内执行一组sql命令,我可以在默认情况下将它们视为交易,或者我应该明确表达交易吗?
SqlCommand.ExecuteReader()
模式.NET
是否足以使其成为事务性的,以防它不是?
命令批处理的第一部分是基于第二部分中更新的表的值声明表变量。
using(var scope = new TransactionScope) {...}
第二部分是应该更新或插入的项目集
DECLARE @tempTable TABLE (ID int,...)
INSERT INTO @tempTable (ID,...)
SELECT [ID],.. FROM [Table] WHERE ...
在他们重新连接后,我通过单个电话IF EXISTS(SELECT 1 FROM @tempTable WHERE ID=@id{0})
BEGIN
UPDATE [Table]
SET ... WHERE ...
END ELSE BEGIN
INSERT INTO [Table] ([ID], ...) VALUES (@id{0}, ...)
END
进行批处理的原因是我希望尽量减少SQL Server和我的应用程序之间的重复参数传输,因为它们在该批处理范围内是常量。
要求的理由是防止冗余代码并了解SqlCommand.ExecuteQuery()
([Table]
的来源)中的原始数据是否可能在批量的上次更新/插入片段完成之前发生变化
答案 0 :(得分:1)
执行SqlCommand不会开始任何交易。
您有两种选择:
我会用第二个。