exec('select @a=houseownerphone1 from geren_'+@op+'_data where auid=@auid')想要给变量a赋值  表明是动态的 要怎么做

解决方案 »

  1.   

    --动态sql的返回值declare @TransactorID int
    set @TransactorID=0
    print(@TransactorID)
    exec sp_executesql N'select @TransactorID=5 ',N'@TransactorID int out ',@TransactorID out 
    print(@TransactorID)
      

  2.   

    --动态sql的返回值declare @a int
    set @a=0exec sp_executesql N''select @a=houseownerphone1 from geren_'+@op+'_data where auid='+ltrim(@auid)',N'@a int out ',@a out 
    print(@a)
      

  3.   


    exec('select @a=houseownerphone1 from geren_'+@op+'_data where auid=@auid')
    --------------------------------------
    declare @sql nvarchar(4000)
    declare @houseownerphone1 varchar(100)
    set @sql='select @a=houseownerphone1 from geren_'+@op+'_data where auid=@auid'
    exec sp_executesql @sql,N'@a varchar(100) output',@houseownerphone1 output
      

  4.   

    ok  顺便问下两位  参数前面加N是干什么用的
      

  5.   

    消息 214,级别 16,状态 3,过程 sp_executesql,第 1 行
    过程需要类型为 'ntext/nchar/nvarchar' 的参数 '@parameters'。
      

  6.   

    -----------N的详解----------------
    /*加上N 代表存入数据库时以Unicode 格式存储。
    N'string' 表示string是个Unicode字符串Unicode 字符串的格式与普通字符串相似,但它前面有一个N 标识符(N 代表SQL-92 标准中的国际语言(National Language))。N 前缀必须是大写字母。例如,'Michél' 是字符串常量而N'Michél' 则是Unicode 常量。Unicode 常量被解释为Unicode 数据,并且不使用代码页进行计算。Unicode 常量确实有排序规则,主要用于控制比较和区分大小写。为Unicode 常量指派当前数据库的默认排序规则,除非使用COLLATE 子句为其指定了排序规则。Unicode 数据中的每个字符都使用两个字节进行存储,而字符数据中的每个字符则都使用一个字节进行存储。有关更多信息,请参见使用Unicode 数据。