这样试试create Trigger insert_tri
on 表名
for insert
as
declare @aa varchar(50)
declare @sql varchar(1000)
set @sql=''
declare cur_tmp cursor for
select 编号 from inserted
open cur_tmp
fetch next from cur_tmp into @aa
while @@fetch_status=0
begin
select @sql='alter table 表名 add '+@aa+' 列数据类型 默认值'
exec(@sql)
fetch next from cur_tmp into @aa
end
close cur_tmp
deallocate cur_tmp
on 表名
for insert
as
declare @aa varchar(50)
declare @sql varchar(1000)
set @sql=''
declare cur_tmp cursor for
select 编号 from inserted
open cur_tmp
fetch next from cur_tmp into @aa
while @@fetch_status=0
begin
select @sql='alter table 表名 add '+@aa+' 列数据类型 默认值'
exec(@sql)
fetch next from cur_tmp into @aa
end
close cur_tmp
deallocate cur_tmp
on 表名
for insert
as
declare @aa varchar(50)
select @aa = 编号 from inserted
alter table 表名 add @aa 列数据类型 默认值
for insert
as
begin
DECLARE @number int,@sql varchar(4000),@sql1 varchar(4000),@i int
DECLARE roy CURSOR
FOR SELECT * from inserted
OPEN roy
FETCH next FROM roy into @number
WHILE @@FETCH_STATUS = 0
begin
begin
if exists(select 1 from sysobjects where name='tb' and xtype='U')
begin
select @i=max(colid)+1 from syscolumns where id=object_id('tb')
set @sql=N'alter table tb add C'+cast(@i as varchar)+' int null'
set @sql1=N'update tb set C'+cast(@i as varchar)+'='+cast(@number as varchar)
--print @sql
--print @sql1
exec(@sql)
exec(@sql1)
end
else
begin
set @sql=N'create table tb(C1 int)'
set @sql1=N' insert tb select C1='+cast(@number as varchar)
exec(@sql)
exec(@sql1)
end
end
FETCH NEXT FROM roy INTO @number
end
CLOSE roy
DEALLOCATE roy
end
insert ta
select 10 union all
select 13 union all
select 18 union all
select 26
查询:
select * from tbC1 C2 C3 C4
----------- ----------- ----------- -----------
10 13 18 26(所影响的行数为 1 行)--drop table ta,tb
我想要的结果是
当在A表中插入一行时 就在B表中插入一个列 列名字是A表的编号
要实现的功能是 比如A表
a编号 | 任务
1 | 吃
原来B表
b编号| 姓名
1 | 张三
2 | 李四比如A表填加一列
a编号| 任务
1 | 吃
2 | 喝
触发后B表
b编号| 姓名 | 2<--------(这个列是我想要增加)
1 | 张三 | null
2 | 李四 | null
可是在主表 填加数据时
出错啊
错误提示 第一行 ‘1’附近有错误 在次填的时候
错误提示 第一行 ‘2’附近有错误
以后一直是这样的 提示不能添数据
错误提示 第一行 ‘3’附近有错误
………………
错误提示 第一行 ‘n’附近有错误
-------------------------------------
你把语句贴出来看看,就像roy_88(中国风_燃烧你的激情!!!) 那样
print @sql看看.
go
alter table orders add 1 varchar(10) --第 1 行: '1' 附近有语法错误。
alter table orders add [1] varchar(10) --正确
提示服务器: 消息 16924,级别 16,状态 1,过程 test_tr,行 9
Cursorfetch: 在 INTO 列表中声明的变量数目必须与所选择的列数目匹配。
语句已终止。
-----------------------------------------------
insert into 活动记录(把那四个字段名写出来)
values ('23','wwwwwwwww','dfddf','1986 3 2')应该是你活动记录表中不止四个字段.
这句就会出错吗?把你写的触发器代码贴出来看下,最好还有活动记录表表结构.
use Exampleif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[活动记录]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[活动记录]
GOCREATE TABLE [dbo].[活动记录] (
[活动编号] [int] NOT NULL ,
[内容] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
[地点] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[时间] [datetime] NULL
) ON [PRIMARY]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[是否参加活动]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[是否参加活动]
GOCREATE TABLE [dbo].[是否参加活动] (
[编号] [int] IDENTITY (1, 1) NOT NULL ,
[ID] [int] NOT NULL ,
[活动1] [bit] NULL
) ON [PRIMARY]
GOcreate Trigger insert_tri
on 活动记录
for insert
as
declare @aa varchar(50)
declare @sql varchar(1000)
set @sql=''
declare cur_tmp cursor for
select 活动编号 from inserted
open cur_tmp
fetch next from cur_tmp into @aa
while @@fetch_status=0
begin
select @sql='alter table 是否参加活动 add '+@aa+' bit null'
exec(@sql)
fetch next from cur_tmp into @aa
end
close cur_tmp
deallocate cur_tmp
goinsert into 活动记录 values ('3','wwwwwwwww','dfddf','1986 3 2')goselect * from 活动记录
go
--但错误信息不是你刚才发的"Cursorfetch: 在 INTO 列表中声明的变量数目必须与所选择的列数目匹配。"alter Trigger insert_tri
on 活动记录
for insert
as
declare @aa varchar(50)
declare @sql varchar(1000)
set @sql=''
declare cur_tmp cursor for
select 活动编号 from inserted
open cur_tmp
fetch next from cur_tmp into @aa
while @@fetch_status=0
begin
select @sql='alter table 是否参加活动 add ['+@aa+'] bit null' --用[]号将字段名括起来
exec(@sql)
fetch next from cur_tmp into @aa
end
close cur_tmp
deallocate cur_tmp
go