none
存储过程变量赋值的问题 RRS feed

  • 问题

  • declare @tablename nvarchar(50)
    declare @a varchar(20)
    declare @sql nvarchar(1000)

    set @tablename='day_碧云里'
    set @a=''

    set @sql= 'select '+@a+'=电量 from '+@tablename+''

    exec(@sql)

    因为表名是根据变量来确定的,所以我这么写了语句,但是我想把‘电量’这个值赋给@a,可是提示如下:
    消息 102,级别 15,状态 1,第 15 行
    '=' 附近有语法错误。

    请问给为老师应该怎么改?
    2009年11月16日 4:49

答案

  • declare @tablename nvarchar(50)
    declare @a varchar(20)
    declare @sql nvarchar(1000)

    set @tablename='day_碧云里'
    set @a=''

    set @sql= 'select '+@a+'=电量 from '+@tablename+''

    exec(@sql)

    因为表名是根据变量来确定的,所以我这么写了语句,但是我想把‘电量’这个值赋给@a,可是提示如下:
    消息 102,级别 15,状态 1,第 15 行
    '=' 附近有语法错误。

    请问给为老师应该怎么改?

    declare @tablename nvarchar(50)
    declare @a varchar(20)
    declare @sql nvarchar(1000)
    
    set @tablename='day_碧云里'
    set @a=''
    
    set @sql= 'select @a =电量 from '+@tablename+'' --注意
    
    exec sp_executesql @sql ,N'@a varchar(20) output ', @a out

    More: blog.csdn.net/happyflystone
    2009年11月16日 5:16

全部回复

  • declare @tablename nvarchar(50)
    declare @a varchar(20)
    declare @sql nvarchar(1000)

    set @tablename='day_碧云里'
    set @a=''

    set @sql= 'select '+@a+'=电量 from '+@tablename+''

    exec(@sql)

    因为表名是根据变量来确定的,所以我这么写了语句,但是我想把‘电量’这个值赋给@a,可是提示如下:
    消息 102,级别 15,状态 1,第 15 行
    '=' 附近有语法错误。

    请问给为老师应该怎么改?

    declare @tablename nvarchar(50)
    declare @a varchar(20)
    declare @sql nvarchar(1000)
    
    set @tablename='day_碧云里'
    set @a=''
    
    set @sql= 'select @a =电量 from '+@tablename+'' --注意
    
    exec sp_executesql @sql ,N'@a varchar(20) output ', @a out

    More: blog.csdn.net/happyflystone
    2009年11月16日 5:16
  • 示例:

    declare @tablename nvarchar(50) declare @a varchar(20) declare @sql nvarchar(1000) set @tablename='ta' set @a=''

    set @sql= 'select @a =col1 from '+@tablename+' where col2 = ''''' exec sp_executesql @sql ,N'@a varchar(20) output ', @a out select @a /* -------------------- A1 (所影响的行数为 1 行) */ select * from ta /* col1 col2 ---- ---- A1 A2 A1 A3 A1 A4 A2 A5 A3 (所影响的行数为 5 行) */

    More: blog.csdn.net/happyflystone
    2009年11月16日 5:17
  • happyflystone老师你好
    我用你这个运行时可以通过,但是我我用
    print @a 查看@a输出结果的时候,为什么都没有?
    2009年11月16日 5:38
  • happyflystone老师你好
    我用你这个运行时可以通过,但是我我用
    print @a 查看@a输出结果的时候,为什么都没有?
    你在过程里print? 先看看print的联机帮助
    More: blog.csdn.net/happyflystone
    2009年11月16日 13:56
  • happyflystone老师你好
    我用你这个运行时可以通过,但是我我用
    print @a 查看@a输出结果的时候,为什么都没有?

    如果没有返回结果,说明你的表里没有数据

    你可以尝试select @a看看是否会返回空值,如果是,说明没有数据

    有dba的职位吗
    2009年11月17日 8:53
    版主
  • 因为你的变量定义的类型是 nvarchar(50)
      这种类型变量应该有EXECUTE 存储过程来执行
    如果你定义的变量是varchar(50)
    你可以用exec来执行

    2009年11月17日 15:21
  • 如果你的输出有表值的话 这个@a的值你应该点击切换到影响那栏才能看到
    2009年11月17日 15:24