外鍵是用來實現(xiàn)“引用完整性”的,說白了就是一種約束,不能用來傳值。
成都創(chuàng)新互聯(lián)公司專注于烏翠企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計,商城系統(tǒng)網(wǎng)站開發(fā)。烏翠網(wǎng)站建設(shè)公司,為烏翠等地區(qū)提供建站服務(wù)。全流程按需求定制制作,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
可以選擇觸發(fā)器或存儲過程。
如果兩個表字段相同可以用觸發(fā)器:
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')
在查詢分析器里執(zhí)行上面的語句后,向A表添加數(shù)據(jù)會同時向B表添加。觸發(fā)器比較方便,缺點是,一旦B表被刪除了,向A表添加數(shù)據(jù)會報錯。
存儲過程就比較自由了:
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不一樣也沒關(guān)系,需要的話,可以再根據(jù)需要向存儲過程添加參數(shù)。
使用的時候不再用INSERT INTO了,用:
EXECUTE proc_InsertAToB 'aaa','aaa','aaa'就可以。
給你做個簡單試驗吧
創(chuàng)建class表,里邊其他字段我就略了
create?table?class(classid?int?not?null?primary?key,
classname?varchar(20))
創(chuàng)建學(xué)生表
create?table?student(studentid?int?not?null?primary?key,
studentname?varchar(10),
classid?int)
添加外鍵級聯(lián)刪除或更新約束
alter?table?student?add?constraint?FK_classid?foreign?key?(classid)?references?class?(classid)?on?update?cascade?on?delete?cascade
向class表增加數(shù)據(jù)
insert?into?class?values?(1,'1班')
insert?into?class?values?(2,'2班')
向student表增加數(shù)據(jù)
insert?into?student?values?(1,'aa',1)
insert?into?student?values?(2,'bb',2)
insert?into?student?values?(3,'cc',3)?--這條是增加不進(jìn)去的,會報錯
刪除class表里一班的數(shù)據(jù)
delete?from?class?where?classid=1
檢查 student 表里數(shù)據(jù)
這個時候你就發(fā)現(xiàn),為1班學(xué)生的那數(shù)據(jù)也同時被刪了
如果你用的是SQL2008以后的數(shù)據(jù)庫版本,可以這樣
SELECT ROW_NUMBER() OVER (ORDER BY B.HID DESC) BH, B.*
FROM
(SELECT h.[醫(yī)院名稱],k.[科室名稱],k.[科室編號],k.id,k.kid
from [醫(yī)院表] as h right join [科室表] as k on k.hid = h.hid
) B
WHERE BH BETWEEN ($page_size * $page_num) AND ($page_size * $page_num +$page_size)
declare @i int
declare @sql nvarchar(max)
set @i=0
set @sql=''
while @i=288
begin
set @sql=@sql+'select ''13207000101001'' site_code,name,dateadd(mi,' + cast((@i+1)*5 as nvarchar(50))+',[datetime]) test_date,col'+ cast(@i as nvarchar(50))+' test_value from 表A where col'+cast(@i as nvarchar(50))+' '''' union all '
set @i=@i+1
end
set @sql=substring(@sql,1,len(@sql)-10)
set @sql='select * into 表B from ('+ @sql+') a'
exec(@sql)
當(dāng)前題目:sqlserver兩表,sqlserver兩表相似80%內(nèi)容
網(wǎng)站網(wǎng)址:http://chinadenli.net/article18/dsshidp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、品牌網(wǎng)站設(shè)計、品牌網(wǎng)站制作、網(wǎng)站制作、微信小程序、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)