Set @sql='declare @@temp ....................这样试试行不行!

解决方案 »

  1.   

    这样不行的。
    有些情况下,可以考虑用UDF返回表变量来做,这样不用预先定义表结构。不过UDF里有些语句不能用,可能有些操作也不好做。
      

  2.   

    declare @sql nvarchar(2000)
    set @sql='CREATE TABLE [dbo].[users] (
    [id] [int] IDENTITY (1, 1) NOT NULL ,
    [username] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [password] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL 
    ) '
    exec sp_executesql @sql
      

  3.   

    to : yeahnope(金@_) 
    你这样是建表,而不是用TABLE变量,这样会加大数据库的工作量的,我就是因为不想用临时表才想用TABLE变量的。
    TO:icevi(按钮工厂)
    能说说UDF 的用法吗?我没用过
      

  4.   

    楼上说的@@temp是全局的对并发性有问题因为你的@temp是在exec中定义的,而exec相当于嵌套过程 你引用时也必须在exec中如:
    Set @sql='declare @temp table(id int,name varchar(50),a1 int,b1 int,a3 int ,c4 int ,.......);select * from @temp'
    -----------------------------^^^^^^^^^^^^^^^^^^^OK了!
    EXAM(@SQL)
      

  5.   

    CREATE FUNCTION aaa(@id int)
    RETURNS TABLE
    AS
    RETURN (SELECT *
          FROM sysobjects where id=@id)使用时用select * from dbo.aaa(object_id('mytable'))就可以。这样不用显示指定表结构。能不能完全动态栏位,有时间我再想想看。
      

  6.   

    要一个字符串内一气喝成,是不是太难点了:-)
    能不能用ALTER TABEL 来修改TABLE变量呢?就象修改表一样
      

  7.   

    你不用一气喝成
      Set @sql='declare @temp table(id int,name varchar(50),a1 int,b1 int,a3 int ,c4 int ,.......);'
    ......
      set @sql=@sql+'select * from @temp'exec(@sql)
      

  8.   

    那我对那个TALBE变量还有很多操作的,都要在一字符串内完成,觉得很不方便,那还不如用临时表
      

  9.   

    操作都放在一个或两个字串里有什么不方便的?反正都是coding嘛!只是调试起来稍微麻烦些。但执行时用TALBE变量效率还是要比临时表高。
      

  10.   

    试了下结果,用临时表比用TABLE变量多用了10秒钟.
    184320条记录