CREATE PROCEDURE dbo.Sp_SetTF   -----将某表@TableName中的主键是@KeyValue的记录的@Fild字段值做真假变换
@TableName VARCHAR(255),  ---表名
@Fild   VARCHAR(255),   ---要改变的字段名
@KeyId VARCHAR(255),  ---表的主键名
@KeyValue VARCHAR(255)  ----逐渐值
ASDECLARE  @Sql varchar(8000)
DECLARE   @Sql1 varchar(8000)
DECLARE   @TF  varchar(255)set @Sql1=' select  '+@TF+'=' +@Fild+'     from '+@TableName +' where  '+'['+@KeyId+']'+'='+@KeyValueexec (@Sql1)IF @TF!=null
begin
IF  @TF='1'
begin
SET @TF='0'
end
if @TF='0'
begin
SET @TF='1'
end
SET @Sql='UPDATE    '+@TableName+'   SET  '+'['+@Fild+']'+'='+@TF+'  where '+''+@KeyId+'='+@KeyValueEXEC  (@Sql)
end
GO
其中  @TF总是null  不知道问题出在哪里

解决方案 »

  1.   

    你的@TF好像声明后就没有被初始化吧,其值自然总是null了
      

  2.   

    --tryCREATE PROCEDURE dbo.Sp_SetTF   -----将某表@TableName中的主键是@KeyValue的记录的@Fild字段值做真假变换
    @TableName VARCHAR(255),  ---表名
    @Fild   VARCHAR(255),   ---要改变的字段名
    @KeyId VARCHAR(255),  ---表的主键名
    @KeyValue VARCHAR(255)  ----逐渐值
    ASDECLARE  @Sql varchar(8000)
    DECLARE   @Sql1 nvarchar(4000)
    DECLARE   @TF  varchar(255)set @Sql1=' select @TF=['+@Fild+'] from ['+@TableName +'] where ['+@KeyId+']='+@KeyValue
    exec sp_executesql @Sql1, N'@TF varchar(255) output', @TF outputIF @TF is not null
    begin
    if @TF='1'
    SET @TF='0'
    else if @TF='0'
    SET @TF='1' 
    end SET @Sql='UPDATE ['+@TableName+'] SET ['+@Fild+']='+@TF+'  where ['+@KeyId+']='+@KeyValue
    EXEC  (@Sql)
    end
    GO
      

  3.   

    怎么写得那么复杂啊
    set @Sql1=' Update ' +@TableName + ' set ' + @Fild + ' = case ' + @Fild + ' When 0 Then 1 When 1 Then 0 Else ' + @Fild + ' End'
      

  4.   

    marco08(天道酬勤)写的没问题!