學生表
use studentSys
go
--創建學生表Student
if exists (select * from sys.objects where name ='Student') drop table studentSys
go
create table Student(
stuId int primary key identity,
stuName varchar(50) not null,
stuBornDay date not null,
stuSex nchar(1) not null,
stuAddress varchar(200),
classId int foreign key references Classes(classId)
)
主鍵自增情況下插入多行數據,插入相同數據時候,在這裏插入三條,執行時候只顯示 (2 行受影響)
這明顯就不符合我預期想要的結果
-- 插入多行數據(備份)
insert into Student (stuName,stuBornDay,stuAddress,stuSex,classId)
select '陳聰',GETDATE(),'湖北武漢','男',1
union select '張三',GETDATE(),'湖北武漢','女',2
union select '張三',GETDATE(),'湖北武漢','女',2
解決方法:
因爲在插入相同數據時候 union
會自動過濾相同數據
UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。
默認地,UNION 操作符選取不同的值。如果允許重複的值,請使用 UNION ALL
那麼上面的insert語句可以修改成這樣
insert into Student (stuName,stuBornDay,stuAddress,stuSex,classId)
select '陳聰',GETDATE(),'湖北武漢','男',1
union all select '張三',GETDATE(),'湖北武漢','女',2
union all select '張三',GETDATE(),'湖北武漢','女',2
關於union
和 union all
的詳細用法可以參見w3c上的詳解,傳送門 : SQL UNION 和 UNION ALL 操作符