动态创建带参数的表名的数据表,如何实现?(50分)

  • 主题发起人 主题发起人 小虾米爱吃鱼
  • 开始时间 开始时间

小虾米爱吃鱼

Unregistered / Unconfirmed
GUEST, unregistred user!
就是我要在某个表的触发器中写一个创建表的语句,不过要创建的表的名字是不定的!要看被触发的数据表中的记录传进来的!
如下:
插入触发:table1 for insert
@number char(10)
select @number=number from inserted
if @number<>''
begin
CREATE TABLE [dbo].[*******] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Number] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[CHD_1] [float] NULL ,
[CHD_2] [float] NULL ,
[CHD_3] [float] NULL ,
[CHD_4] [float] NULL ,
[DTime] [datetime] NULL ,
[PowerV] [float] NULL
) ON [PRIMARY]
end

语句中,其‘******’就是我想用@number 这个参数的值来代替,请问高手我该怎么做?
直接用@number代替的话,出来的结果就是建了一个表名为‘@number’的表,我要的不是这个结果,我要的是建一个以@number中的值为名字的表。高手,求救
 
用字符连接
 
'CREATE TABLE [dbo].'+表名+'(
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Number] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[CHD_1] [float] NULL ,
[CHD_2] [float] NULL ,
[CHD_3] [float] NULL ,
[CHD_4] [float] NULL ,
[DTime] [datetime] NULL ,
[PowerV] [float] NULL
) ON [PRIMARY]
'
 
拜托,你自己试一下!怎么可以啊!根本不可能这样的啊!你这样连语法检测都通不过呢!
 
加exec( 'CREATE TABLE [dbo].'+表名+'(
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Number] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[CHD_1] [float] NULL ,
[CHD_2] [float] NULL ,
[CHD_3] [float] NULL ,
[CHD_4] [float] NULL ,
[DTime] [datetime] NULL ,
[PowerV] [float] NULL
) ON [PRIMARY]
'

)
 
使用EXECUTE 加SQL语句来处理,操作查一下SQL 帮助说明。
 
Ok!谢谢!我怎么就忘记了呢!呵呵!
 
多人接受答案了。
 
CREATE TRIGGER CreateTable ON [dbo].[inserted]
FOR INSERT
AS
declare @number char(10)
declare @SQLStr varchar(8000)
select @number=number from inserted
if @number<>''
begin
set @SQLStr = '
CREATE TABLE [dbo].[ ' + @number + '] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Number] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[CHD_1] [float] NULL ,
[CHD_2] [float] NULL ,
[CHD_3] [float] NULL ,
[CHD_4] [float] NULL ,
[DTime] [datetime] NULL ,
[PowerV] [float] NULL
) ON [PRIMARY]'
exec(@SQLStr)
end
 
后退
顶部