请问sqlserver中的两个表怎么进行关联
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问sqlserver中的两个表怎么进行关联相关的知识,希望对你有一定的参考价值。
有两个表,一个表是负责注册的,当注册一个用户时会生成一条记录,每条记录有一个序列号,我想要另外的一个表跟着这个表同时生成记录,有相同的序列号,而又不想两表合并,怎么实现啊?请指教
能用外键实现吗?
可以选择触发器或存储过程。
如果两个表字段相同可以用触发器:
CREATE TRIGGER trigger_AToB on A
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO A(a,b,c) SELECT a,b,c FROM inserted
INSERT INTO B(a,b,c) SELECT a,b,c FROM inserted
END
GO
INSERT INTO a(a,b,c)VALUES('aaa','aaa','aaa')
在查询分析器里执行上面的语句后,向A表添加数据会同时向B表添加。触发器比较方便,缺点是,一旦B表被删除了,向A表添加数据会报错。
存储过程就比较自由了:
CREATE PROC proc_InsertAToB
@a VARCHAR(10),
@b VARCHAR(20),
@c VARCHAR(30)
as
INSERT INTO A(a,b,c)VALUES(@a,@b,@c)
INSERT INTO B(a,b,c)VALUES(@a,@b,@c)
表B的字段和表A不一样也没关系,需要的话,可以再根据需要向存储过程添加参数。
使用的时候不再用INSERT INTO了,用:
EXECUTE proc_InsertAToB 'aaa','aaa','aaa'就可以。 参考技术A 你是想得到 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. 参考技术B CREATE TRIGGER studen
ON student_test //这个就是你注册那个表
FOR INSERT,update,delete
AS
insert into my_table (a,b) values (11,22) //这写你要关联的表的超做
GO本回答被提问者采纳 参考技术C 一、用触发器,不过最好不要这么用,因为这样做会使得不好维护
二、两次分别插入到两个表,这样比较直观 参考技术D 用触发器可以实现.
看一下联机丛书
sqlserver 2008问题!
sqlservre 2008中,创建了一张表后,为录入数据,有没有关联的表相连,再修改表的字段修改不了。是怎么回事?提示错误是“不允许保存更改,您所做的更改要求删除并重新创建一下表,您对无法重新创建的表进行了更改或者启用了“阻止保存要求重新创建表的更改”选项”。
sqlservre 2008中,创建了一张表后,未录入数据,也没有关联的表相连,再修改表的字段修改不了。是怎么回事?提示错误是“不允许保存更改,您所做的更改要求删除并重新创建一下表,您对无法重新创建的表进行了更改或者启用了“阻止保存要求重新创建表的更改”选项”。
可以建表,建表后修改不了里面的字段!
SQL 2008 “工具” --“选项 ”
参考技术A 你只有把你的表现删除掉在重新新建就可以了,如果不这样就试试Alter tabel XX这样 但是我不确定能不能有效果你试试吧~! 参考技术B ”工具“--“选项”--“Desingers” 将右边“阻止保存要求重新创建表的更改”前面的勾取消就行了 参考技术C 二楼,正解以上是关于请问sqlserver中的两个表怎么进行关联的主要内容,如果未能解决你的问题,请参考以下文章