日期:2014-05-16 浏览次数:20556 次
use tempdb; go if OBJECT_ID('dbo.Orders', 'U') is not null drop table dbo.Orders; create table dbo.Orders ( orderid int not null constraint PK_Orders primary key, orderdate date not null constraint SFT_Orderdate Default(Current_timestamp), empid int not null, custid varchar(10) not null ); --8.1.5 BULK INSERT语句 --BULK INSERT语句用于将文件中的数据导入一个已经存在的表 BULK insert dbo.orders from 'E:\orders.txt' with(datafiletype = 'char', fieldterminator = ',', rowterminator = '\n' ); --8.1.6 IDENTITY属性 --当把值插入(Insert)有标识列的表时,数据库引擎会根据列定义中提供的 --一个种子(seed,第1个值)和增量(步长值)自动生成递增的标识值。 if OBJECT_ID('dbo.t1', 'u') is not null drop table dbo.t1; create table dbo.t1 (keycol int not null identity(1,1) constraint PK_T1 primary key, datacol varchar(10) not null constraint chk_t1_datacol check(datacol like '[A-Za-z]%') ); --在insert语句中,应该完全忽略标识列,就像她们在表中不存在一样 insert into dbo.t1(datacol) values('AAAA'); --如果须要获得这个新生成的标识符,可以查询以下两个函数之一:@@identity和scope_identity()。 declare @new_identity as int; insert into dbo.t1(datacol) values('AAAAAA'); set @new_identity = SCOPE_IDENTITY(); select @new_identity as new_identity; --@@identity和scope_identity都是返回当前会话生成的最后一个标识值。不过,如果你想知道一 --个表当前的标识值而不考虑作用域,则应该使用ident_current函数,并将表明作为其输入参数 select IDENT_CURRENT('dbo.t1') as new_identity; --标识属性要注意的另一个重要地方是,不能在现有的列上增加或删除标识属性,只能用create table --语句或旨在增加新列的alter table语句,在定义列的同时一起定义标识属性. --标识属性并不会强制实施唯一性约束.如果想要保证标识列的唯一性,可以在标识列上另外同时定义 --一个主键或唯一性约束. --8.2 删除数据 if OBJECT_ID('dbo.orders', 'u') is not null drop table dbo.orders; if OBJECT_ID('dbo.customers', 'u') is not null drop table dbo.customers; select * into dbo.customers from TSQLFundamentals2008.Sales.customers; select * into dbo.orders from TSQLFundamentals2008.Sales.Orders; alter table dbo.customers add constraint PK_Customers primary key(custid); alter table dbo.orders add constraint PK_Orders primary key(orderid), constraint FK_Orders_Customers foreign key(custid) references dbo.customers(custid) --8.2.1 DELETE语句 delete from dbo.orders where orderdate < '20070101' --Delete当删除大量数据时,可能会花费大量时间 --8.2.2 TRUNCATE语句 --TRUNCATE语句不是标准的SQL语句,它用于删除表中的所有行.与DELETE语句不用, --TRUNCATE不需要过滤条件. TRUNCATE的效率比较快,执行速度非常快. truncate table dbo.t1 --当表中有标识列时,TRUNCATE和DELETE在功能上有所不同.TRUNCATE会把标识值重 --置为最初的种子,而delete则不会. --当目标表是由外键约束引用的表时,SQL Server将不允许对这样的表使用TRUNCATE --语句,即使引用表为空或外键被禁止也是如此。 --8.2.3 基于联接的DELETE --T-SQL支持一种基于联接的DELETE语法,可以根据对另一个表中相关行的属性定义 --的过滤器来删除表中的数据行。 delete from o from dbo.orders as o join dbo.customers as c on o.custid = c.custid where c.country = N'USA'; delete from dbo.orders where exists (select * from dbo.customers as c where c.custid = dbo.orders.custid and c.country = N'USA');