我在 SO、MSDN 和其他各种来源上进行了一些搜索,发现了很多关于事务的问题,但似乎没有一个正是我正在处理的问题。
诚然,尽管我确实了解 ACID 和事务的概念,但我仍然是初级 DBA。我正在处理一个 SQL 脚本:
上述所有操作都是独立工作的,并且在(我认为是)单个事务中包含时,它们也会协同工作。我试图理解的是,当事务的另一部分失败时,事务的“部分”如何完成(并可能提交)。
为简洁起见,假设我有名为“ProcessReport”和“RetrieveReport”的工作程序。这两个过程中的动态 SQL 都以“SELECT”开头,然后从那里开始构建。测试用例:
CREATE TABLE ReportTable (FirstName VARCHAR(100), LastName VARCHAR(100), OrderId INT);
GO
CREATE PROCEDURE ProcessReport
AS
BEGIN
DECLARE @SQL VARCHAR(4000)
-- start creating dynamic sql
SET @SQL = 'SELECT FirstName, LastName, '
--create rest of dynamic SQL here...
INSERT INTO ReportTable (FirstName, LastName) EXEC(@SQL)
END
GO
CREATE PROCEDURE RetrieveReport
AS
BEGIN
DECLARE @SQL VARCHAR(4000)
-- start creating dynamic sql …
Run Code Online (Sandbox Code Playgroud)