INT主键自增长主子表的插入和更新

这个问题困扰了我很久,网上也参考了几篇文章,一直没解决。
先说更新,这个容易一些:存储过程如下:
 1 ALTER   proc  proc_UpdatePtoPinfoAndPdetail
 2 (
 3 @tableinfo   varchar ( 20 ), @tabledetail   varchar ( 20 ), @GoodsName   nvarchar ( 30 ),
 4 @BranchID   int , @GoodsCate   int ,
 5 @MarketPrices   decimal , @StockPrice   decimal , @SuppliersID   varchar ( 50 ),
 6 @GoodsOrigin   nvarchar ( 20 ),  @GoodsService   nvarchar ( 30 ),
 7 @GoodsTime   varchar ( 50 ),  @GoodsParameters   nvarchar ( 1000 ), 
 8 @GoodsCount   int , @GoodsReturn   nvarchar ( 1000 ), 
 9 @GoodsImage0   varchar ( 20 ), @GoodsID   int
10 )
11
12 As
13 begin   transaction
14
15 exec ( ' update  ' + @tableinfo + '  set GoodsName= ' + @GoodsName + ' ,BranchID= ' + @BranchID + ' ,GoodsOrigin= ' + @GoodsOrigin +
16 ' ,GoodsService= ' + @GoodsService + ' ,GoodsTimeToM= ' + @GoodsTime + ' ,GoodsReturn= ' + @GoodsReturn +
17 ' ,GoodsParameters= ' + @GoodsParameters + ' ,GoodsInventory= ' + @GoodsCount + '  where GoodsID= ' + @GoodsID )
18
19 exec ( ' update  ' + @tabledetail + '  set MarketPrices= ' + @MarketPrices + ' ,StockPrice= ' + @StockPrice + '
20 ,GoodsImg0= ' + @GoodsImage0 + '  where GoodsID= ' + @GoodsID )
21
22 COMMIT   TRANSACTION
23
语法没错误,可以建立成功。在执行的时候到Goodsname的时候若是输入int型,则插入成功,否则报错:

服务器: 消息 207,级别 16,状态 3,行 1
列名 'asd' 无效。

(所影响的行数为 4 行)

不知道如何解决,请大家指点指点~

插入的:

 1 ALTER            proc  proc_InsertPtoPinfoAndPdetail
 2 (
 3 @tableinfo   varchar ( 20 ), @tabledetail   varchar ( 20 ),
 4 @TopTreeID   int ,
 5 @GoodsName   nvarchar ( 30 ), @GoodsBrand   nvarchar ( 20 ), @BranchID   int , @SuppliersID   varchar ( 50 ),
 6 @MarketPrices   decimal , @StockPrice   decimal , @GoodsOrigin   nvarchar ( 20 ),
 7 @GoodsService   nvarchar ( 30 ), @GoodsTime   varchar ( 50 ),  @GoodsParameters   nvarchar ( 1000 ),
 8 @GoodsCount   int , @GoodsReturn   nvarchar ( 1000 ), @GoodsImg0   varchar ( 20 ),
 9 @GoodsID   int  output
10 )
11
12 As
13 begin   transaction
14 declare   @sqlstr   varchar ( 4000 )
15 set   @sqlstr =
16 ' Insert  ' +   @tableinfo + ' (TopTreeID,BranchID,GoodsName,GoodsBrand,SuppliersID,GoodsOrigin,GoodsService,
17 GoodsTimeToM,GoodsReturn,GoodsParameters,GoodsInventory) values
18 ( ' + CONVERT ( nvarchar , @TopTreeID ) + ' , ' + CONVERT ( nvarchar , @BranchID ) + ' , ' + @GoodsName + ' , ' + @GoodsBrand + ' , ' + @SuppliersID + ' , ' + @GoodsOrigin + ' , ' + @GoodsService + ' , ' +
19 @GoodsTime + ' , ' + @GoodsReturn + ' , ' + @GoodsParameters + ' , ' + CONVERT ( nvarchar , @GoodsCount ) + ' ) '
20 exec ( @sqlstr )
21 select   @GoodsID = @@identity
22
23 declare   @sqlstr1   varchar ( 4000 )
24 set   @sqlstr1 =
25 ' insert  ' +   @tabledetail + ' (GoodsID,MarketPrices,StockPrice,GoodsImg0) 
26 values( ' + @GoodsID + ' , ' + @MarketPrices + ' , ' + @StockPrice + ' , ' + @GoodsImg0 + ' ) '
27 exec ( @sqlstr1 )
28 COMMIT   TRANSACTION

说明:对主子表进行插入,主键为Goodsid自增长,所以在插入子表的时候必须获取主表的系统分配ID,用了一个全局变量@@identity获取
这段代码的数据转换部分我还不敢确定是否正确,如果不进行转换,则跟更新报一样的错误,但是转换也会报错:


(所影响的行数为 1 行)

服务器: 消息 245,级别 16,状态 1,过程 proc_InsertPtoPinfoAndPdetail,行 24
将 varchar 值 'insert goodsdetail_book(GoodsID,MarketPrices,StockPrice,GoodsImg0)
values(' 转换为数据类型为 int 的列时发生语法错误。

似乎将整句当成一个字符串处理。

走过路过的高手多谢指教啊~


08年3月20日
贴上正确的插入

 1 ALTER   proc  proc_InsertPtoPinfoAndPdetail
 2 (
 3 @tableinfo   varchar ( 20 ), @tabledetail   varchar ( 20 ),
 4 @TopTreeID   int , @GoodsIsNull   int ,
 5 @GoodsName   nvarchar ( 30 ), @GoodsBrand   nvarchar ( 20 ), @BranchID   int , @SuppliersID   varchar ( 50 ),
 6 @MarketPrices   decimal , @StockPrice   decimal , @GoodsOrigin   nvarchar ( 20 ), @GoodsDetail   nvarchar ( 1000 ),
 7 @GoodsService   nvarchar ( 30 ), @GoodsTime   varchar ( 50 ),  @GoodsParameters   nvarchar ( 1000 ),
 8 @GoodsCount   int , @GoodsReturn   nvarchar ( 1000 ), @GoodsImg0   varchar ( 100 ), @GoodsImg1   varchar ( 100 ),
 9 @GoodsImg2   varchar ( 100 ), @GoodsImg3   varchar ( 100 ), @GoodsImg4   varchar ( 100 ), @SmallImage   varchar ( 100 ),
10 @GoodsID   nvarchar ( 20 ) output
11 )
12
13 As
14 begin   transaction
15
16 exec ( ' Insert  ' +   @tableinfo + ' (TopTreeID,BranchID,GoodsName,GoodsBrand,SuppliersID,GoodsOrigin,GoodsService,
17 GoodsTimeToM,GoodsReturn,GoodsParameters,GoodsInventory,GoodsDetails) values
18 ( ' + @TopTreeID + ' , ' + @BranchID + ' ," ' + @GoodsName + ' "," ' + @GoodsBrand + ' "," ' + @SuppliersID + ' "," ' + @GoodsOrigin +
19 ' "," ' + @GoodsService + ' "," ' + @GoodsTime + ' "," ' + @GoodsReturn + ' "," ' + @GoodsParameters + ' "," ' + @GoodsCount + ' "," ' + @GoodsDetail + ' ") ' )
20
21 select   @GoodsID = @@identity
22 if ( @GoodsImg0   is   not   null )
23 begin
24      set   @GoodsImg0   =   convert ( nvarchar ( 10 ), @GoodsID ) + ' _01. ' + @GoodsImg0
25 set   @SmallImage = convert ( nvarchar ( 10 ), @GoodsID ) + ' _Themb. ' + @GoodsImg0
26 end
27 if ( @GoodsImg1   is   not   null )
28 begin
29      set   @GoodsImg1   =   convert ( nvarchar ( 10 ), @GoodsID ) + ' _02. ' + @GoodsImg1
30 end
31 if ( @GoodsImg2   is   not   null )
32 begin
33      set   @GoodsImg2   =   convert ( nvarchar ( 10 ), @GoodsID ) + ' _03. ' + @GoodsImg2
34 end
35 if ( @GoodsImg3   is   not   null )
36 begin
37      set   @GoodsImg3   =   convert ( nvarchar ( 10 ), @GoodsID ) + ' _04. ' + @GoodsImg3
38 end
39 if ( @GoodsImg4   is   not   null )
40 begin
41      set   @GoodsImg4   =   convert ( nvarchar ( 10 ), @GoodsID ) + ' _05. ' + @GoodsImg4
42 end
43
44 exec ( ' insert  ' +   @tabledetail + ' (GoodsID,BranchID,MarketPrices,StockPrice,GoodsIsNull,GoodsImg0,GoodsImg1,GoodsImg2,GoodsImg3,GoodsImg4,GoodsImg0Small) 
45 values(" ' + @GoodsID + ' ", ' + @BranchID + ' , ' + @MarketPrices + ' , ' + @StockPrice + ' , ' + @GoodsIsNull + ' ," ' + @GoodsImg0 + ' "," ' + @GoodsImg1 + ' "," ' + @GoodsImg2 + ' "," ' + @GoodsImg3 + ' "," ' + @GoodsImg4 + ' "," ' + @SmallImage + ' ") ' )
46 COMMIT   TRANSACTION
47


你可能感兴趣的:(int)