CREATE PROCEDURE [dbo].[sw_UpdateUserPwd]
(         
    
        @UserName varchar (50),
        @Pwd varbinary (50) ,
        @UserTable varchar(50) 
)
AS
SET NOCOUNT ONdeclare @sql varchar(200)set @sql=N'UPDATE '+@UserTable+' SET PWD = '''+@Pwd+''' WHERE (USERNAME='+@UserName+')' 
exec sp_executesql @sql GO

解决方案 »

  1.   

    --改为如下试:CREATE PROCEDURE [dbo].[sw_UpdateUserPwd]
    (         
        
            @UserName varchar (50),
            @Pwd varbinary (50) ,
            @UserTable varchar(50) 
    )
    AS
    SET NOCOUNT ONdeclare @sql varchar(200)set @sql=N'UPDATE '+@UserTable+' SET PWD = '''+@Pwd+''' WHERE (USERNAME='''+@UserName+''')' 
    exec sp_executesql @sql GO
      

  2.   

    @Pwd是varbinary,如果把@SQL里的它强制转换成nvarchar是可以通过的,但是程序实际上运行的时候会出错,密码是用hash1算法加密的。
      

  3.   

    服务器: 消息 403,级别 16,状态 1,过程 sw_UpdateUserPwd,行 13
    对数据类型而言运算符无效。运算符为 add,类型为 nvarchar。
      

  4.   

    你也可以不用varbinary类型啊!
    用varchar(50)就可以了
      

  5.   

    varbinary类型最好在程序中调用时转换为字符型CREATE PROCEDURE [dbo].[sw_UpdateUserPwd]
    (         
        
            @UserName  varchar   (50) ,
            @Pwd       varchar   (50) ,
            @UserTable varchar(50) 
    )
    AS
    SET NOCOUNT ONdeclare @sql nvarchar(4000)set @sql=N'UPDATE '+@UserTable+' SET PWD = '''+cast(@Pwd as nvarchar)+''' WHERE (USERNAME='''+@UserName+''')' 
    exec sp_executesql @sql GO
    --调用
    exec sw_UpdateUserPwd '列名','01111010110101101011' , '表名'
      

  6.   

    我其它的存储过程都是这个类型,改成varchar工程太大,不改就解决不了吗??
      

  7.   

    -- 用真正的参数传递, 不要拼sqlCREATE PROCEDURE [dbo].[sw_UpdateUserPwd]
    (         
        
            @UserName varchar (50),
            @Pwd varbinary (50) ,
            @UserTable varchar(50) 
    )
    AS
    SET NOCOUNT ONdeclare @sql nvarchar(4000)set @sql=N'UPDATE '+@UserTable+' SET PWD = @Pwd WHERE (USERNAME=@UserName)' 
    exec sp_executesql @sql , N'
            @UserName varchar (50),
            @Pwd varbinary (50) ',
            @UserName, @Pwd
    GO
      

  8.   

    用这种真正的参数传递, 你不必考虑数据类型, 即使你使用 text/netx/image 这类参数(不是变量), 也可以处理得到.