帮我看下:
select @keys=column_name from (exec('sp_pkeys  '+ @table1))
这个句子该怎么写吗?

解决方案 »

  1.   

    完整的句子如下:(就是复制表的功能)
    CREATE  PROCEDURE NewTable(@table1 varchar(50),@table2 varchar(50)) 
    AS
    begin
      declare @sqlstr varchar(500)
      declare @keys varhcar(50)
      select @keys=column_name from (exec('sp_pkeys  '+ @table1))
      @sqlstr =  ' if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].['+@table2+']'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)'+
                 '  drop table [dbo].['+@table2+']'+
                 ' GO ' +
                 ' select * into '+@table2+ ' from ' + @table1 +
                 ' GO ' +
                 ' ALTER TABLE ['+@table2+'] ADD  ' + 
                 ' CONSTRAINT [PK_'+@table2+'] PRIMARY KEY  CLUSTERED (['+@keys+'])  ON [PRIMARY] ' +
                 ' GO  '
      print @sqlstr  
      exec(@sqlstr)
    end
      

  2.   

    把SQL截出来然后在查询分析器中执行,看看是哪里有问题
      

  3.   

    create table t(t1 varchar(20),t2 varchar(20),t3 varchar(20),t4 varchar(20),t5 varchar(20),t6 varchar(20))declare @tablename1 varchar(200)
    set @tablename1='sp_pkeys in_stock'
    insert into t exec(@tablename1)
    先建一个t表来保存sp_pkeys执行后的结果,这个表结构可以根据 exec sp_pkeys 表名来建。
    然后在存储过程中调用这个中间表来实现,你试一下,我测了一下
    上面的执行结果:
    waredb dbo In_Stock instock_id 1 PK_In_Stock