问题描述:根据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' 附近有语法错误。为什么编译不过呢?
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' 附近有语法错误。为什么编译不过呢?
PRINT @SQL出来看看是什么
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
不需要游标,参考这个。
这样应该可以了 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)