今天在看PetShop 4.0的代码,发现它在Insert订单父子表时.使用动态SQL来Inert.不用存储过程也不用事务(当然使用的隐形事务).代码如下:
EXEC sp_executesql
N'Declare @ID int; Declare @ERR int;
INSERT INTO Orders VALUES(@UserId, @Date, @ShipAddress1, @ShipAddress2, @ShipCity,
@ShipState, @ShipZip, @ShipCountry, @BillAddress1, @BillAddress2,
@BillCity, @BillState, @BillZip, @BillCountry, ''UPS'',
@Total, @BillFirstName, @BillLastName, @ShipFirstName,
@ShipLastName, @AuthorizationNumber, ''US_en'');
SELECT @ID=@@IDENTITY;
INSERT INTO OrderStatus VALUES(@ID, @ID, GetDate(), ''P'');
SELECT @ERR=@@ERROR;
INSERT INTO LineItem VALUES( @ID, @LineNumber0, @ItemId0, @Quantity0, @Price0);
SELECT @ERR=@ERR+@@ERROR;
INSERT INTO LineItem VALUES( @ID, @LineNumber1, @ItemId1, @Quantity1, @Price1);
SELECT @ERR=@ERR+@@ERROR;SELECT @ID, @ERR',
N'@UserId varchar(80),@Date datetime,@ShipAddress1 varchar(80),@ShipAddress2 varchar(80),
@ShipCity varchar(80),@ShipState varchar(80),@ShipZip varchar(50),@ShipCountry varchar(50),
@BillAddress1 varchar(80),@BillAddress2 varchar(80),@BillCity varchar(80),
@BillState varchar(80),@BillZip varchar(50),@BillCountry varchar(50),@Total decimal(7,2),
@BillFirstName varchar(80),@BillLastName varchar(80),@ShipFirstName varchar(80),
@ShipLastName varchar(80),@AuthorizationNumber int,@LineNumber0 int,@ItemId0 varchar(10),
@Quantity0 int,@Price0 decimal(4,2),@LineNumber1 int,@ItemId1 varchar(10),@Quantity1 int,
@Price1 decimal(4,2)',
@UserId = 'tony', @Date = '06 13 2008 4:07:24:220PM', @ShipAddress1 = 'aaa',
@ShipAddress2 = 'aaa', @ShipCity = 'asdfasdf', @ShipState = 'CA', @ShipZip = '11111',
@ShipCountry = 'USA', @BillAddress1 = 'aaa', @BillAddress2 = 'aaa',
@BillCity = 'asdfasdf', @BillState = 'CA', @BillZip = '11111', @BillCountry = 'USA',
@Total = 36400.00, @BillFirstName = 'aa', @BillLastName = 'aa', @ShipFirstName = 'aa',
@ShipLastName = 'aa', @AuthorizationNumber = 1534391807, @LineNumber0 = 1,
@ItemId0 = 'EST-4', @Quantity0 = 1000, @Price0 = 17.50, @LineNumber1 = 2,
@ItemId1 = 'EST-5', @Quantity1 = 1000, @Price1 = 18.90
想问一下.为什么要这样做.这样做的好处....谢谢!