我的一个存储过程如下:
ALTER PROCEDURE [dbo].[ap_BuyAndSaleAction]
@DataAction int,
@ID int = 0,
@RentWay nvarchar(100),
@City nvarchar(100),
@District nvarchar(100),
@Title nvarchar(100),
@Address nvarchar(1000),
@XiaoQu nvarchar(100),
@AddTime datetime,
@UserID int,
@HouseType tinyint,
@Money money,
@Floor tinyint,
@TotalFloor tinyint,
@MainJi smallint,
@NianDai nvarchar(100),
@Validity smallint,
@ZhongJie tinyint,
@ZhuangXiu nvarchar(1000),
@PayMent nvarchar(500),
@ChaoXiang nvarchar(100),
@ChanQuan nvarchar(100),
@KaiFaShang nvarchar(100),
@Contact nvarchar(100),
@Tel varchar(20),
@Mobile varchar(20),
@Memo nvarchar(max),
@Memo1 nvarchar(50),
@Memo2 nvarchar(50),
@Memo3 nvarchar(50),
@Flag tinyint,
@TableNum nvarchar(20)
AS
if @DataAction=0
BEGIN
declare @select varchar(max)
set @select = 'insert into [tb_'+rtrim(@TableNum)+'_BuyAndSale]
(
[RentWay],
[City],
[District],
[Title],
[Address],
[XiaoQu],
[AddTime],
[UserID],
[HouseType],
[Money],
[Floor],
[TotalFloor],
[MainJi],
[NianDai],
[Validity],
[ZhongJie],
[ZhuangXiu],
[PayMent],
[ChaoXiang],
[ChanQuan],
[KaiFaShang],
[Contact],
[Tel],
[Mobile],
[Memo],
[Memo1],
[Memo2],
[Memo3],
[Flag]

values('+
@RentWay+','+
@City+','+
@District+','+
@Title+','+
@Address+','+
@XiaoQu+','+
rtrim(@AddTime)+','+
rtrim(@UserID)+','+
rtrim(@HouseType)+','+
rtrim(@Money)+','+
rtrim(@Floor)+','+
rtrim(@TotalFloor)+','+
rtrim(@MainJi)+','+
@NianDai+','+
rtrim(@Validity)+','+
rtrim(@ZhongJie)+','+
@ZhuangXiu+','+
@PayMent+','+
@ChaoXiang+','+
@ChanQuan+','+
@KaiFaShang+','+
@Contact+','+
@Tel+','+
@Mobile+','+
@Memo+','+
@Memo1+','+
@Memo2+','+
@Memo3+','+
rtrim(@Flag)+')'
 EXEC(@select)
set 
@ID=scope_identity()
end
if @DataAction=1
begin
declare @update varchar(1000)
set @update ='UPDATE [tb_'+rtrim(@TableNum)+'_BuyAndSale] SET
[RentWay] = @RentWay,
[City] = @City,
[District] = @District,
[Title] = @Title,
[Address] = @Address,
[XiaoQu] = @XiaoQu,
[AddTime] = @AddTime,
[UserID] = @UserID,
[HouseType] = @HouseType,
[Money] = @Money,
[Floor] = @Floor,
[TotalFloor] = @TotalFloor,
[MainJi] = @MainJi,
[NianDai] = @NianDai,
[Validity] = @Validity,
[ZhongJie] = @ZhongJie,
[ZhuangXiu] = @ZhuangXiu,
[PayMent] = @PayMent,
[ChaoXiang] = @ChaoXiang,
[ChanQuan] = @ChanQuan,
[KaiFaShang] = @KaiFaShang,
[Contact] = @Contact,
[Tel] = @Tel,
[Mobile] = @Mobile,
[Memo] = @Memo,
[Memo1] = @Memo1,
[Memo2] = @Memo2,
[Memo3] = @Memo3,
[Flag] = @Flag
WHERE

[ID] = @ID'
exec(@update)
end
if @DataAction=2
begin
declare @delete varchar(100)
set @delete = 'delete from [tb_'+rtrim(@TableNum)+'_BuyAndSale] where  [ID] = @ID'
exec(@delete)
end
select @ID
当执行@DataAction=0,填入相映的之后,出来结果,这是怎么回事,请各位大侠帮帮忙??

解决方案 »

  1.   

    @ID作为Output参数传出来.
    @ID int = 0 OUTPUT, 
      

  2.   

    没有问题呀以下是我测试存储过程的脚本:USE [SFDSJ]
    GODECLARE @return_value intEXEC @return_value = [dbo].[ap_BuyAndSaleAction]
    @DataAction = 0,
    @RentWay = N'0',
    @City = N'213',
    @District = N'214',
    @Title = N'万柳小区一居室',
    @Address = N'万柳小区',
    @XiaoQu = N'万柳小区',
    @AddTime = NULL,
    @UserID = 1,
    @HouseType = 0,
    @Money = 120,
    @Floor = 5,
    @TotalFloor = 12,
    @MainJi = 90,
    @NianDai = N'1999',
    @Validity = 4,
    @ZhongJie = 0,
    @ZhuangXiu = N'精装',
    @PayMent = N'现金',
    @ChaoXiang = N'朝南',
    @ChanQuan = N'有',
    @KaiFaShang = N'万科',
    @Contact = N'张',
    @Tel = N'20662066',
    @Mobile = N'12312345678',
    @Memo = N'很不错的防止',
    @Memo1 = N'''''',
    @Memo2 = N'''''',
    @Memo3 = N'''''',
    @Flag = 0,
    @TableNum = N'1'SELECT 'Return Value' = @return_valueGO
      

  3.   

    你使用动态SQL语句的时候 可以考虑下 将@select 变量输出 然后再进行调试
      

  4.   

    从上面你的测试代码中可以看到原因@AddTime = NULL,
    在存储过程中,@AddTime与其它代码相加后,@select也为null了所以并不是你的代码没执行或没出错,而是根本没有什么可以执行
    另外,生成SQL语句时,字符串变量,日期变量等应加上引号,如
    values('+ 
    @RentWay+','+ 
    @City+','+ 
    @District+','+ 
    @Title+','+ 
    @Address+','......应改成values('''+ 
    @RentWay+''','''+ 
    @City+''','''+ 
    @District+''','''+ 
    @Title+''','''+ 
    @Address+''','''.......
      

  5.   

    谢谢各位大侠,该问题已经解决。
    特别感谢sdxiong ,WWWTYB 
    结合两个提供的解决方式,用@select调试,然后修改。最后成功!