問題1: insert into table2(name,date,num) values(1,2,3)--插入數據 insert into table2(values,vlues1...) (select a.value1,a.value2... from table2 a inner join table1 b on a.name=b.name) ---推薦,用觸發器自動完成(能輕鬆實現)
----問題2----------- --當表字段太多,假設有n個,隻查詢前面m-n個的函數 ---create by talantlee ---4/19/05 ---測試:假如表a不超過nl列記錄就返回所有列記錄,超過就返回m-n列的記錄 -- --declare @a varchar(800) --set @a=dbo.select_ncolumn('student',1,5)--表名,起始,結束---樓主的列多的話,把5設置成大數 --exec('select '+@a +' from student')---注意空格 create function select_ncolumn(@tname varchar(100),@m int,@n int) returns varchar(800) as begin declare @string varchar(500) declare @i int,@maxcount int set @i =@m set @string ='' select @maxcount=count(*) from syscolumns where id=object_id(@tname) if(@maxcount<@n) set @n=@maxcount while (@i<=@n) begin select @string=@string+','+name from syscolumns where id=object_id(@tname) and colorder= @i set @i=@i+1 end set @string=stuff(@string,1,1,'')return @string end
--問題三 declare @name nvarchar(100) select @name=name from sysobjects where id in (select cdefault from syscolumns where id=object_id('tablea')) exec('alter table tablea drop constraint '+@name)
问题1: 我想你可以这样做: 首先创建两个表,假设你的两个表结构是这样的。 create table #table ( id int identity, name varchar(8) unique, value1 int, value2 int, value3 int )create table #table1(id int identity, name varchar(8) , num int, date1 datetime, value1 int, value2 int, value3 int)然后向#table中添加几条记录: insert into #table values('c',43,14,33) insert into #table values('a',14,78,23) insert into #table values('b',77,22,66)要想实现你要的那种效果,我创建了一个存储过程 create proc in1 @name varchar(8), @num int, @date1 datetime as insert into #table1(name,num,date1) values(@name,@num,@date1) update #table1 set value1=#table.value1, value2=#table.value2,value3=#table.value3 from #table join #table1 on #table.name=#table1.name where #table.name=@name最后一步,要想向第二表#table1中添加记录时,就可以这样做 exec in1 'a',666,'2001-12-01'这样就可以啦,你试一下吧
insert into table2(name,date,num) values(1,2,3)--插入數據
insert into table2(values,vlues1...) (select a.value1,a.value2... from table2 a inner join table1 b on a.name=b.name)
---推薦,用觸發器自動完成(能輕鬆實現)
--當表字段太多,假設有n個,隻查詢前面m-n個的函數
---create by talantlee
---4/19/05
---測試:假如表a不超過nl列記錄就返回所有列記錄,超過就返回m-n列的記錄
--
--declare @a varchar(800)
--set @a=dbo.select_ncolumn('student',1,5)--表名,起始,結束---樓主的列多的話,把5設置成大數
--exec('select '+@a +' from student')---注意空格
create function select_ncolumn(@tname varchar(100),@m int,@n int)
returns varchar(800)
as
begin
declare @string varchar(500)
declare @i int,@maxcount int
set @i =@m
set @string =''
select @maxcount=count(*) from syscolumns where id=object_id(@tname)
if(@maxcount<@n)
set @n=@maxcount
while (@i<=@n)
begin
select @string=@string+','+name from syscolumns where id=object_id(@tname) and colorder= @i
set @i=@i+1
end
set @string=stuff(@string,1,1,'')return @string
end
declare @name nvarchar(100)
select @name=name from sysobjects where id in (select cdefault from syscolumns where id=object_id('tablea'))
exec('alter table tablea drop constraint '+@name)
我想你可以这样做:
首先创建两个表,假设你的两个表结构是这样的。
create table #table
(
id int identity,
name varchar(8) unique,
value1 int,
value2 int,
value3 int
)create table #table1(id int identity,
name varchar(8) ,
num int,
date1 datetime,
value1 int,
value2 int,
value3 int)然后向#table中添加几条记录:
insert into #table values('c',43,14,33)
insert into #table values('a',14,78,23)
insert into #table values('b',77,22,66)要想实现你要的那种效果,我创建了一个存储过程
create proc in1
@name varchar(8),
@num int,
@date1 datetime
as
insert into #table1(name,num,date1)
values(@name,@num,@date1)
update #table1 set value1=#table.value1,
value2=#table.value2,value3=#table.value3
from #table join #table1 on #table.name=#table1.name
where #table.name=@name最后一步,要想向第二表#table1中添加记录时,就可以这样做
exec in1 'a',666,'2001-12-01'这样就可以啦,你试一下吧
问题1的难点在于,两个表的value字段在我编写代码时并不存在,它是用户在运行程序时自定义的。我在编程时并不知道用户会设置几个这样的字段以及各个字段的名称是什么。不过,我的数据库中有另外一个表中会保存value字段的名称
table3
[name]
value1
value2
value3
…… 问题2我想问的是对类似table2的表,字段数目不清楚,查询的时候用SELECT *可以将所有字段查询出来而不用管它有多少字段及各个字段是什么名称。但如果我不想在查询结果中包含num字段该如何做?
我在做一个工资管理系统,希望其中的工资项目能由用户自定义。其中有三个表
工资项目表table3的字段是:
[项目名称] [计算列] [计算公式]
员工工资缺省值表table1的初始字段是:
[员工编号]
月工资表table2的初始字段是:
[工资单号] [员工编号] [日期] 程序运行后,用户向table3中插入记录,程序自动在table1、table2中生成相应的字段。比如说table3中现在有如下记录
[项目名称] [计算列] [计算公式]
基本工资 0 NULL
奖金 0 NULL
保险金 0 NULL
实发工资 1 基本工资+奖金-保险金
则通过触发器,table1、table2的字段变为
table1
[员工编号][基本工资][奖金][保险金][实发工资]
table2
[工资单号] [员工编号] [日期][基本工资][奖金][保险金][实发工资]用户再给table1中的各个员工的工资项目设定不同的初始值,如
table1
[员工编号]基本工资][奖金][保险金][实发工资]
NO_001 1000 200 100 1100
NO_002 3200 500 100 3600
NO_003 2500 1000 100 3400现在我希望在向table2插入记录时,能根据员工编号自动引用table1中的工资项目值