sql server如何关联两个表
现在有两个表table1和table2table1中有字段id(为自动编号),ttid,text1,text2table2中有字段id(为自动编号),text1,text...
现在有两个表table1和table2
table1中有字段id(为自动编号),ttid,text1,text2
table2中有字段id(为自动编号),text1,text2,text3,text4,text5
table1中的ttid与table2中的id相关联
table1中的text1和text2分别与table2中的text1和text2相关联
现在向table2中写数据,talbe1就会自动获取table2中相关联的数据,该如何做了?请教各位!小弟初学,请多关照!!
在table2的管理触发器中写了下面代码:
create trigger trgtable2insert
on table2
after insert
as
begin
insert table1 (ttid, text1, text2)
select id, text1, text2 from inserted
end
用asp页面对table2写数据时报错:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]无法将 NULL 值插入列 'Server_ID',表 'WebMedia.dbo.Prog_Server';该列不允许空值。INSERT 失败。
/sqlrk.asp,行 112
这是怎么回事了?谁能教教我?? 展开
table1中有字段id(为自动编号),ttid,text1,text2
table2中有字段id(为自动编号),text1,text2,text3,text4,text5
table1中的ttid与table2中的id相关联
table1中的text1和text2分别与table2中的text1和text2相关联
现在向table2中写数据,talbe1就会自动获取table2中相关联的数据,该如何做了?请教各位!小弟初学,请多关照!!
在table2的管理触发器中写了下面代码:
create trigger trgtable2insert
on table2
after insert
as
begin
insert table1 (ttid, text1, text2)
select id, text1, text2 from inserted
end
用asp页面对table2写数据时报错:
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]无法将 NULL 值插入列 'Server_ID',表 'WebMedia.dbo.Prog_Server';该列不允许空值。INSERT 失败。
/sqlrk.asp,行 112
这是怎么回事了?谁能教教我?? 展开
7个回答
展开全部
你是想得到 table2 的数据对吧?
你可以用视图来做
create view table1 as select id as ttid ,text1,text2 from table2
教程:
CREATE VIEW
名称
CREATE VIEW — 构建一个虚拟表(视图)
语法
CREATE VIEW view AS SELECT query
输入
view
所要创建的视图名称.
query
一个将为视图提供行和列的 SQL 查询.
请参阅 SELECT 语句获取有效参数的更多信息.
输出
CREATE
如果视图创建成功,返回此信息.
ERROR: Relation 'view' already exists
如果在数据库中已经存在所声明的视图.
NOTICE create: attribute named "column" has an unknown type
如果不声明,所创建的视图将有一个未知类型的字段.例如,下面命令返回一个警告:
CREATE VIEW vista AS SELECT 'Hello World'
然而下面命令将不出现警告:
CREATE VIEW vista AS SELECT text 'Hello World'
描述
CREATE VIEW 将定义一个表的视图.这个视图不是物理上实际存在(于磁盘)的.具体的说,自动生成一个改写索引规则的查询用以支持在视图上的检索.
注意
目前,视图是只读的.
使用 DROP VIEW 语句删除视图.
用法
创建一个由所有 Comedy (喜剧)电影组成的视图:
CREATE VIEW kinds AS
SELECT *
FROM films
WHERE kind = 'Comedy';
SELECT * FROM kinds;
code | title | did | date_prod | kind | len
-------+---------------------------+-----+------------+--------+-------
UA502 | Bananas | 105 | 1971-07-13 | Comedy | 01:22
C_701 | There's a Girl in my Soup | 107 | 1970-06-11 | Comedy | 01:36
(2 rows)
兼容性
SQL92
SQL92 为 CREATE VIEW 声明了一些附加的功能:
CREATE VIEW view [ column [, ...] ]
AS SELECT expression [ AS colname ] [, ...]
FROM table [ WHERE condition ]
[ WITH [ CASCADE | LOCAL ] CHECK OPTION ]
完整的SQL92命令可选的子句是:
CHECK OPTION
这个选项用于可更新视图.所有对视图的 INSERT 和 UPDATE 都要经过视图定义条件的校验.如果没有通过校验,更新将被拒绝.
LOCAL
对这个视图进行完整性检查.
CASCADE
对此视图和任何相关视图进行完整性检查.在既没有声明 CASCADE 也没有声名 LOCAL 时,假设为 CASCADE.
你可以用视图来做
create view table1 as select id as ttid ,text1,text2 from table2
教程:
CREATE VIEW
名称
CREATE VIEW — 构建一个虚拟表(视图)
语法
CREATE VIEW view AS SELECT query
输入
view
所要创建的视图名称.
query
一个将为视图提供行和列的 SQL 查询.
请参阅 SELECT 语句获取有效参数的更多信息.
输出
CREATE
如果视图创建成功,返回此信息.
ERROR: Relation 'view' already exists
如果在数据库中已经存在所声明的视图.
NOTICE create: attribute named "column" has an unknown type
如果不声明,所创建的视图将有一个未知类型的字段.例如,下面命令返回一个警告:
CREATE VIEW vista AS SELECT 'Hello World'
然而下面命令将不出现警告:
CREATE VIEW vista AS SELECT text 'Hello World'
描述
CREATE VIEW 将定义一个表的视图.这个视图不是物理上实际存在(于磁盘)的.具体的说,自动生成一个改写索引规则的查询用以支持在视图上的检索.
注意
目前,视图是只读的.
使用 DROP VIEW 语句删除视图.
用法
创建一个由所有 Comedy (喜剧)电影组成的视图:
CREATE VIEW kinds AS
SELECT *
FROM films
WHERE kind = 'Comedy';
SELECT * FROM kinds;
code | title | did | date_prod | kind | len
-------+---------------------------+-----+------------+--------+-------
UA502 | Bananas | 105 | 1971-07-13 | Comedy | 01:22
C_701 | There's a Girl in my Soup | 107 | 1970-06-11 | Comedy | 01:36
(2 rows)
兼容性
SQL92
SQL92 为 CREATE VIEW 声明了一些附加的功能:
CREATE VIEW view [ column [, ...] ]
AS SELECT expression [ AS colname ] [, ...]
FROM table [ WHERE condition ]
[ WITH [ CASCADE | LOCAL ] CHECK OPTION ]
完整的SQL92命令可选的子句是:
CHECK OPTION
这个选项用于可更新视图.所有对视图的 INSERT 和 UPDATE 都要经过视图定义条件的校验.如果没有通过校验,更新将被拒绝.
LOCAL
对这个视图进行完整性检查.
CASCADE
对此视图和任何相关视图进行完整性检查.在既没有声明 CASCADE 也没有声名 LOCAL 时,假设为 CASCADE.
展开全部
sql server可以用字段来相互关联两个表,
具体方法如下:
表A,
字段:
id int
sid int (表B 用来关联的字段)
表B,
字段:
id int (表A sid字段 用来关联表A的)
....
具体实际用法如下:
用法1、select * from 表A left join 表B on 表A.sid=表B.id
用法2、select (select 字段 from 表B where 表B.id=表A.sid)
from 表A
具体方法如下:
表A,
字段:
id int
sid int (表B 用来关联的字段)
表B,
字段:
id int (表A sid字段 用来关联表A的)
....
具体实际用法如下:
用法1、select * from 表A left join 表B on 表A.sid=表B.id
用法2、select (select 字段 from 表B where 表B.id=表A.sid)
from 表A
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把你的触发器改为下面的样子,应该就可以解决了
create trigger trgtable2insert
on table2
after insert
as
begin
insert table1 (ttid, text1, text2)
select id, text1, text2 from inserted
where inserted.id=@@identity
end
我刚才试过了,原来的插入数据时有问题
create trigger trgtable2insert
on table2
after insert
as
begin
insert table1 (ttid, text1, text2)
select id, text1, text2 from inserted
where inserted.id=@@identity
end
我刚才试过了,原来的插入数据时有问题
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
做一个触发器来实现
create trigger trgtable2insert
on table2
after insert
as
begin
insert table1 (ttid, text1, text2)
select id, text1, text2 from inserted
end
_________________________________________________________
完整测试代码
--创建表1
create table table1
(
id int identity,
ttid int,
text1 char,
text2 char
)
--创建表2
create table table2
(
id int identity,
text1 char,
text2 char,
text3 char,
text4 char
)
--创建after insert触发器
create trigger trgtable2insert
on table2
after insert
as
begin
insert table1 (ttid, text1, text2)
select id, text1, text2 from inserted
end
--向表2插入数据
insert table2 values ('a','b','c','d')
insert table2 values ('t','y','c','d')
insert table2 values ('w','o','c','d')
insert table2 values ('q','m','c','d')
--验证表1中的记录
select * from table1
create trigger trgtable2insert
on table2
after insert
as
begin
insert table1 (ttid, text1, text2)
select id, text1, text2 from inserted
end
_________________________________________________________
完整测试代码
--创建表1
create table table1
(
id int identity,
ttid int,
text1 char,
text2 char
)
--创建表2
create table table2
(
id int identity,
text1 char,
text2 char,
text3 char,
text4 char
)
--创建after insert触发器
create trigger trgtable2insert
on table2
after insert
as
begin
insert table1 (ttid, text1, text2)
select id, text1, text2 from inserted
end
--向表2插入数据
insert table2 values ('a','b','c','d')
insert table2 values ('t','y','c','d')
insert table2 values ('w','o','c','d')
insert table2 values ('q','m','c','d')
--验证表1中的记录
select * from table1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2007-11-17
展开全部
在.TABLE2 里面加一个 TTID ..
FK_TABLE2_TABLE1
用 TTID 来控制..
FK_TABLE2_TABLE1
用 TTID 来控制..
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询