问题描述:根据Match表的MatchID字段的数据创建一个新表dt_temp ,新表的列名是MatchID的数据,不确定个数
if exists (select * from dbo.sysobjects where id = object_id(N'[dt_temp]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dt_temp]set nocount on declare cur cursor for 
select MatchNum from Match where ShelterID=1declare @fname nvarchar(50)
declare @sql nvarchar(2000)
declare @type nvarchar(50)
declare @i intset @type='varchar(50),'
set @i=0
set @sql='create table [dt_temp]('open curfetch next from cur into @fname while @@fetch_status=0
begin 
if @i>0
set @sql=@sql+','set @sql=@sql+@fname+' '+@type+' '
set @i=@i+1fetch next from cur into @fname 
close curend set @sql = @sql +')'declare @rtn nvarchar(50)if @i=0 
set @rtn = 'B表未找到合适记录,无法建表!'
else
begin
if  (exec sp_executesql( N@sql) =0)
set @rtn='已经建表'
else
set @rtn ='出错了'
end 错误之处是服务器: 消息 156,级别 15,状态 1,行 40
在关键字 'exec' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 40
第 40 行: 'N@sql' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,行 42
在关键字 'else' 附近有语法错误。为什么编译不过呢?

解决方案 »

  1.   

    if (exec sp_executesql( N@sql) =0) 
    PRINT @SQL出来看看是什么
      

  2.   

    print @sql create table [dt_temp](第1次 varchar(50) ,第2次 varchar(50) )
      

  3.   

    select MatchNum from Match where ShelterID=1 返回是 第1次 第2次 第3次 第4次
      

  4.   

    declare @sql as varchar(1000)
    declare @i as int
    set @i = 0
    set @sql = 'create table tb ('
    while @i <= 10
    begin
      set @sql = @sql +
      '[' + convert(varchar(10),dateadd(day , @i , getdate()),120) + '] int ,'
      set @i = @i + 1
    end
    set @sql = left(@sql , len(@sql) - 1) + ') select * from tb'
    exec(@sql)/*
    2009-04-03  2009-04-04  2009-04-05  2009-04-06  2009-04-07  2009-04-08  2009-04-09  2009-04-10  2009-04-11  2009-04-12  2009-04-13
    ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------(0 行受影响)
    */drop table tb本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2009/04/04/4047624.aspx
    不需要游标,参考这个。
      

  5.   

    谢了 thl258 
    这样应该可以了 create proc pro_temp 
    @N int
    asdeclare @sql as varchar(2000)
    declare @i as int
    set @i = 0
    set @sql = 'create table tb ([FootNum] varchar(50),'
    while @i <= @N
    begin
      set @sql = @sql +
      '[第' + convert(varchar(50),@i)+'次] varchar(50) ,'
      set @i = @i + 1
    endset @sql = left(@sql , len(@sql) - 1) + ') select * from tb'exec(@sql)