set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
goCREATE PROC [dbo].[AddAccountInfo](
@userName varchar(50),
@password varchar(50),
@TMStamp bigint,
@sync_id int
)
as
begindeclare @sql varchar(500)
set @sql='insert into AccountInfo values('+@userName+','+@password+','+@TMStamp+','+@sync_id+')'
             
print @sql
endset @sql='insert into AccountInfo values('''+@userName+''','''+@password+''','+@TMStamp+','+@sync_id+')'@userName和@password是varchar类型,前后应该 几个,号啊,怎么老报错啊
exec AddAccountInfo 'aa','xx',1,1消息 8114,级别 16,状态 5,过程 AddAccountInfo,第 12 行
从数据类型 varchar 转换为 bigint 时出错。

解决方案 »

  1.   

    你只是执行这句sql,没必要组合成sql语句再执行吧,直接
    insert into AccountInfo values(@userName,@password,@TMStamp,@sync_id)
    这样不就可以了,不过列要对上号。
      

  2.   

    是引号的问题,字符型要加引号,所以 @userName 前后要加引号(双引号),比如set @sqltext = 'insert into czyxx (id,name,mm) values(1,"管理员","d41d8cd98f00b204e9800998ecf8427e")';
      

  3.   


    set @sql='insert into AccountInfo values('+@userName+','+@password+','+cast(@TMStamp as varchar(100))+','+cast(@sync_id as varchar(100))+')'
      
      

  4.   

    你这个式类型的问题,set @sql='insert into AccountInfo values('+@userName+','+@password+','+cast(@TMStamp as Varchar)+','+cast(@sync_id as Varchar)+')'
      

  5.   


    set @sql='insert into AccountInfo values('+@userName+','+@password+','+cast(@TMStamp as varchar(100))+','+cast(@sync_id as varchar(100))+')'        结果
    insert into AccountInfo values(sfwe,xx,1,1)
    消息 128,级别 15,状态 1,第 1 行
    在此上下文中不允许使用名称 "sfwe"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名
      

  6.   

    insert into AccountInfo values('sfwe','xx',1,1)//这个是需要加引号的,我说的变量OK?
      

  7.   

    查询分析器执行存储过程是这样的 EXEC [AddAccountInfo] 'sfwe','xx',1,1
      

  8.   

    exec AddAccountInfo 'sfwe','xx',1,1
      

  9.   

    樓上各位都误导LZ了,变量要不要加引号要看情况,不是絕對的,像下面这种情况就要加引号set @sql='insert into AccountInfo values('''+@userName+''','''+@password+''','''+cast(@TMStamp as varchar(100))+''','''+cast(@sync_id as varchar(100))+''')'Exec (@sql)
      

  10.   

    LZ的存储过程,可以这样,类型对上就行了,不需要定义@sql变量组合成语句
    CREATE PROC [dbo].[AddAccountInfo](
    @userName varchar(50),
    @password varchar(50),
    @TMStamp bigint,
    @sync_id int
    )
    as
    begin
    insert into AccountInfo values(@userName,@password,@TMStamp,@sync_id)
    end