PetShop中为什么不用存储过程,而使用动态SQL??效率高?安全?

今天在看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

想问一下.为什么要这样做.这样做的好处....谢谢!
posted @ 2008-06-14 00:37  武广敬  阅读(1473)  评论(3)    收藏  举报