表操作

2020-04-14 17:02:53 浏览数 (1)

这节记录表的相关操作。

1.创建表
代码语言:javascript复制
CREATE TABLE dbo.PurchaseOrderDetail  
(  
    PurchaseOrderID int NOT NULL  
    ,LineNumber smallint NOT NULL  
    ,ProductID int NULL  
    ,UnitPrice money NULL  
    ,OrderQty smallint NULL  
    ,ReceivedQty float NULL  
    ,RejectedQty float NULL  
    ,DueDate datetime NULL  
);  
2.删除表
代码语言:javascript复制
DROP TABLE dbo.PurchaseOrderDetail;  
3.重命名表
代码语言:javascript复制
USE AdventureWorks2012;   
GO  
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr'; 
4.查看表定义
代码语言:javascript复制
select * from sys.tables
where object_id = OBJECT_ID('Person.Address')
5.查看依赖项

a.查看表依赖的对象

代码语言:javascript复制
USE AdventureWorks2012;  
GO  
SELECT * FROM sys.sql_expression_dependencies  
WHERE referencing_id = OBJECT_ID(N'Production.vProductAndDescription');   
GO  

即查看表作为引用项时的情况(referencing_id)。就是它引用别人

b.查看依赖于表的对象

代码语言:javascript复制
USE AdventureWorks2012;   
GO  
SELECT * FROM sys.sql_expression_dependencies  
WHERE referenced_id = OBJECT_ID(N'Production.vProductAndDescription');   
GO  

表作为被引用项的情况(referenced_id)

6.向表中添加列
代码语言:javascript复制
ALTER TABLE dbo.doc_exa ADD column_b VARCHAR(20) NULL, column_c INT NULL ;
7.从表中删除列
代码语言:javascript复制
ALTER TABLE dbo.doc_exb DROP COLUMN column_b;
8.对列重命名
代码语言:javascript复制
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
9.复制列

a.只将表定义从一个表复制到另一个表,不复制表数据。

即只复制表的列

代码语言:javascript复制
select * 
into AddressTemp
from Person.Address
where 1<>1

b.将数据从一个表复制到另一个表

代码语言:javascript复制
USE AdventureWorks2012;  
GO  
CREATE TABLE dbo.EmployeeSales  
( BusinessEntityID   varchar(11) NOT NULL,  
  SalesYTD money NOT NULL  
);  
GO  
INSERT INTO dbo.EmployeeSales  
    SELECT BusinessEntityID, SalesYTD   
    FROM Sales.SalesPerson;  
GO
10.修改列

修改列的数据类型

代码语言:javascript复制
CREATE TABLE dbo.doc_exy (column_a INT ) ;  
GO  
INSERT INTO dbo.doc_exy (column_a) VALUES (10) ;  
GO  
ALTER TABLE dbo.doc_exy ALTER COLUMN column_a DECIMAL (5, 2) ;  
GO  
11.指定计算列

计算列是虚拟列,并非实际存储在表中,除非此列标记为 PERSISTED。 计算列的表达式可以使用其他列中的数据来计算其所属列的值。

示例1.在创建表时指定计算列

创建一个表,其中的计算列将 QtyAvailable 列的值乘以 UnitPrice 列的值。

代码语言:javascript复制
CREATE TABLE dbo.Products
   (
      ProductID int IDENTITY (1,1) NOT NULL
      , QtyAvailable smallint
      , UnitPrice money
      , InventoryValue AS QtyAvailable * UnitPrice
    )
;
-- Insert values into the table.
INSERT INTO dbo.Products (QtyAvailable, UnitPrice)
   VALUES (25, 2.00), (10, 1.5)
;
-- Display the rows in the table.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products
;

示例2:将新计算列定义添加到现有表中

代码语言:javascript复制
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5)
;

(可选)添加 PERSISTED 参数,将计算值以物理方式存储到表中:

代码语言:javascript复制
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5) PERSISTED
;

示例3:将现有列更改为计算列

代码语言:javascript复制
ALTER TABLE dbo.Products DROP COLUMN RetailValue
;
GO
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5)
;
12.指定列的默认值

方式一:alter table

代码语言:javascript复制
CREATE TABLE dbo.doc_exz (column_a INT, column_b INT); -- Allows nulls.
GO
INSERT INTO dbo.doc_exz (column_a) VALUES (7);
GO
ALTER TABLE dbo.doc_exz
  ADD CONSTRAINT DF_Doc_Exz_Column_B
  DEFAULT 50 FOR column_b;
GO

方式二:create table

代码语言:javascript复制
CREATE TABLE dbo.doc_exz (
      column_a INT,
      column_b INT DEFAULT 50);

方式三:命名的 CONSTRAINT

代码语言:javascript复制
 CREATE TABLE dbo.doc_exz (
      column_a INT,
      column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50);

0 人点赞