您的位置:

SQL Server 查看表结构的语句全解析

在数据库开发和管理过程中,查看表结构是一项非常重要的工作。通过查看表结构,可以了解表的字段数据类型、约束、索引等信息。本文将从多个方面对 SQL Server 查看表结构的语句进行详细的阐述,希望对大家有所帮助。

一、SQL Server 查看表结构命令

要查看 SQL Server 中表的结构,最基本的方法就是使用 sp_help 命令,语法格式如下:

sp_help '表名'

使用该命令可以查询表结构、索引、触发器、约束等信息。下面是一个示例:

sp_help 'Sales.OrderHeader'

执行结果如下图所示:

除了 sp_help 命令,还有一些其他的命令可以查看表结构,比如 sp_helpindexsp_columnssp_pkeyssp_fkeys 等,不同的命令可以用来查看不同的信息。具体使用方法可以参考 MSSQL 官方文档。

二、SQL Server 建表语句

如果需要查看表的建表语句,可以使用以下两种方法。

方法一:使用 SQL Server Management Studio(SSMS)生成建表语句。

  1. 在 SSMS 中,右键单击要查看的表,选择“脚本表”-“生成到”-“新查询编辑器窗口”
  2. 生成的脚本如下图所示:
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [Sales].[OrderHeader](
	[SalesOrderID] [int] IDENTITY(1,1) NOT NULL,
	[RevisionNumber] [tinyint] NOT NULL,
	[OrderDate] [datetime] NOT NULL,
	[DueDate] [datetime] NOT NULL,
	[ShipDate] [datetime] NULL,
	[Status] [tinyint] NOT NULL,
	[OnlineOrderFlag] [dbo].[Flag] NOT NULL,
	[SalesOrderNumber] [nvarchar](25) NOT NULL,
	[PurchaseOrderNumber] [nvarchar](25) NULL,
	[AccountNumber] [nvarchar](15) NULL,
	[CustomerID] [int] NOT NULL,
	[SalesPersonID] [int] NULL,
	[TerritoryID] [int] NULL,
	[BillToAddressID] [int] NOT NULL,
	[ShipToAddressID] [int] NOT NULL,
	[ShipMethodID] [int] NOT NULL,
	[CreditCardID] [int] NULL,
	[CreditCardApprovalCode] [varchar](15) NULL,
	[CurrencyRateID] [int] NULL,
	[SubTotal] [money] NOT NULL,
	[TaxAmt] [money] NOT NULL,
	[Freight] [money] NOT NULL,
	[TotalDue]  AS (isnull(([SubTotal]+[TaxAmt])+[Freight],(0))),
	[Comment] [nvarchar](128) NULL,
	[rowguid] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
	[ModifiedDate] [datetime] NOT NULL,
 CONSTRAINT [PK_SalesOrderHeader_SalesOrderID] PRIMARY KEY CLUSTERED 
(
	[SalesOrderID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [Sales].[OrderHeader]  WITH CHECK ADD  CONSTRAINT [FK_SalesOrderHeader_SalesPerson_SalesPersonID] FOREIGN KEY([SalesPersonID])
REFERENCES [Sales].[SalesPerson] ([BusinessEntityID])
GO

ALTER TABLE [Sales].[OrderHeader] CHECK CONSTRAINT [FK_SalesOrderHeader_SalesPerson_SalesPersonID]
GO

ALTER TABLE [Sales].[OrderHeader]  WITH CHECK ADD  CONSTRAINT [FK_SalesOrderHeader_ShipMethod_ShipMethodID] FOREIGN KEY([ShipMethodID])
REFERENCES [Purchasing].[ShipMethod] ([ShipMethodID])
GO

ALTER TABLE [Sales].[OrderHeader] CHECK CONSTRAINT [FK_SalesOrderHeader_ShipMethod_ShipMethodID]
GO

ALTER TABLE [Sales].[OrderHeader]  WITH CHECK ADD  CONSTRAINT [FK_SalesOrderHeader_Address_BillToAddressID] FOREIGN KEY([BillToAddressID])
REFERENCES [Person].[Address] ([AddressID])
GO

ALTER TABLE [Sales].[OrderHeader] CHECK CONSTRAINT [FK_SalesOrderHeader_Address_BillToAddressID]
GO

ALTER TABLE [Sales].[OrderHeader]  WITH CHECK ADD  CONSTRAINT [FK_SalesOrderHeader_Address_ShipToAddressID] FOREIGN KEY([ShipToAddressID])
REFERENCES [Person].[Address] ([AddressID])
GO

ALTER TABLE [Sales].[OrderHeader] CHECK CONSTRAINT [FK_SalesOrderHeader_Address_ShipToAddressID]
GO

ALTER TABLE [Sales].[OrderHeader]  WITH CHECK ADD  CONSTRAINT [FK_SalesOrderHeader_Customer_CustomerID] FOREIGN KEY([CustomerID])
REFERENCES [Sales].[Customer] ([CustomerID])
GO

ALTER TABLE [Sales].[OrderHeader] CHECK CONSTRAINT [FK_SalesOrderHeader_Customer_CustomerID]
GO

ALTER TABLE [Sales].[OrderHeader]  WITH CHECK ADD  CONSTRAINT [FK_SalesOrderHeader_CurrencyRate_CurrencyRateID] FOREIGN KEY([CurrencyRateID])
REFERENCES [Sales].[CurrencyRate] ([CurrencyRateID])
GO

ALTER TABLE [Sales].[OrderHeader] CHECK CONSTRAINT [FK_SalesOrderHeader_CurrencyRate_CurrencyRateID]
GO

ALTER TABLE [Sales].[OrderHeader] ADD  CONSTRAINT [DF_OrderHeader_OnlineOrderFlag]  DEFAULT ((1)) FOR [OnlineOrderFlag]
GO

ALTER TABLE [Sales].[OrderHeader] ADD  CONSTRAINT [DF_SalesOrderHeader_Status]  DEFAULT ((1)) FOR [Status]
GO

ALTER TABLE [Sales].[OrderHeader] ADD  CONSTRAINT [DF_SalesOrderHeader_rowguid]  DEFAULT (newid()) FOR [rowguid]
GO

方法二:使用 T-SQL 查询系统表 sys.sql_modules

SELECT 
    sm.definition
FROM 
    sys.tables st
INNER JOIN 
    sys.sql_modules sm ON sm.object_id = st.object_id
WHERE 
    st.name = 'SalesOrderHeader'

三、SQL Server 修改表结构语句

修改表结构是非常常见的任务,下面介绍两种方法来修改表结构。

方法一:使用 SSMS 修改表结构。

  1. 在 SSMS 中,右键单击要修改的表,选择“修改”。
  2. 进行需要的修改,比如添加、删除或修改列、添加索引、添加或删除约束等。
  3. 点击“保存”按钮,系统将自动生成 ALTER TABLE 语句。

方法二:使用 ALTER TABLE 语句手动修改表结构。

ALTER TABLE Sales.OrderHeader 
ADD Discount decimal(18,2) NOT NULL DEFAULT 0;

上面的语句在 Sales.OrderHeader 表中添加了一个名为 Discount 的列,默认值为 0。

四、SQL Server 查看表结构快捷键

在 SSMS 中,可以通过快捷键 F4 或者选择“对象资源管理器”中的“属性”来查看表的属性。

五、SQL Server 复制表结构语句

复制表结构非常常见,下面介绍一种方法。

SELECT TOP 0 *
INTO Sales.OrderHeaderNew
FROM Sales.OrderHeader

上面的语句会在当前数据库中创建一个名为 Sales.OrderHeaderNew 的表,并复制 Sales.OrderHeader 表的结构。注意,由于使用了 TOP 0,所以不会复制数据。

六、SQL Server 表结构导出 SQL 语句

如果需要将表结构导出为 SQL 语句,可以使用 SSMS 的“生成脚本向导”。

  1. 在 SSMS 中,右键单击要导出的表,选择“脚本表”-“生成脚本向导”。
  2. 在向导中,选择要导出的对象(表、视图、触发器等)、选择脚本选项(生成是否包括数据、是否生成 DROP 语句等),然后生成脚本。

七、SQL Server 查看创建表语句

在 SQL Server 中,查看创建表语句非常简单。可以使用方法二中介绍的 sys.sql_modules 表来查询。

SELECT 
    sm.definition
FROM 
    sys.objects so
INNER JOIN 
    sys.sql_modules sm ON sm.object_id = so.object_id
WHERE 
    so.name = 'SalesOrderHeader'

八、SQL Server 怎么查看表结构

除了前面介绍的方法外,还可以使用 SSMS 的“设计”功能查看表结构。

  1. 在 SSMS 中,右键单击要查看的表,选择“设计”。
  2. 可以通过该界面来查看表的各种属性、添加、删除或修改列、添加索引、添加或删除约束等。

九、SQL Server 查看锁表语句

要查看锁表语句,可以使用以下两种方法。

方法一:使用动态管理视图 sys.dm_tran_locks

SELECT 
    OBJECT_NAME(p.object_id) AS TableName,
    p.resource_type AS ResourceType,
    p.resource_description AS Description,
    t.request_mode AS Mode,
    t.request_session_id AS SessionID
FROM 
    sys.dm_tran_locks AS t
INNER JOIN 
    sys.partitions AS p ON t.resource_associated_entity_id = p.hobt_id
WHERE 
    OBJECT_NAME(p.object_id) = 'SalesOrderHeader'

方法二:使用 SQL Server Profiler 工具监视锁信息。

十、SQL Server 修改表结构的 SQL 语句

除了第三个小标题中介绍的方法外,还可以使用以下的 SQL 语句来修改表结构。

ALTER TABLE Sales.OrderHeader
ALTER COLUMN DueDate datetime NOT NULL;

上面的语句会将 Sales.OrderHeader 表中 DueDate 列的数据类型修改为 datetime,同时设置为不允许为空。

总结

本文对 SQL Server 查看表结构的语句进行了详细的解析,例如使用 sp_help 命令查询表结构、使用 SSMS 生成建表语句或修改表结构、使用 T-SQL 查询系统表 sys.sql_modules 查看创建表语句、使用 SSMS 的“设计”功能查看表结构等。希望对大家有所帮助。