帮忙解决一下sql中如何使 CREATE TABLE接受的tablename是变量的情况,具体问题内详
为了能将每天产生的数据保存在以当天的日期为名称的表中,我必须使用T-SQL(sql2000中)的CREATE TABLE来创建数据表,语句如下:
CREATE TABLE [dbo].Tname
([ID] [int] NOT NULL ,
[time] [datetime] NULL ,
[URL] [char] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[Type] [int] NULL
) ON [PRIMARY] GO";
如果我希望Tname是一个变量的话,以上的语句有该怎么写?
declare @tname char(20)
set @tname='newtable'
exec( 'CREATE TABLE [dbo].'+@Tname+'
([ID] [int] NOT NULL ,
[time] [datetime] NULL ,
[URL] [char] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[Type] [int] NULL
) ON [PRIMARY]')
将
declare @tname char(20)
set @tname='newtable'
换成
declare @tname char(20)
set @tname=CONVERT(char,getdate(),110)
好象就有问题
查询分析器返回错误提示:
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'CONVERT' 附近有语法错误。
convert应该问题不大,但convert的结果含-,表名不认的,而且sql中如果表明是数字时要用[]
修改可用
declare @tname char(20)
set @tname=CONVERT(char,getdate(),112) /*112为'YYYYMMDD' */
exec( 'CREATE TABLE [dbo].['+@Tname+']
([ID] [int] NOT NULL ,
[time] [datetime] NULL ,
[URL] [char] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[Type] [int] NULL
) ON [PRIMARY]')
或者
exec( 'CREATE TABLE [dbo].D'+@Tname+'
([ID] [int] NOT NULL ,
[time] [datetime] NULL ,
[URL] [char] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[Type] [int] NULL
) ON [PRIMARY]')