T-SQL查询显示表定义?

什么是查询将显示完整的定义,包括SQL Server表的索引和键? 我想要一个纯粹的查询 – 并知道SQL Studio可以给我这个,但我经常在“野生”的电脑,只有最简单的应用程序,我没有权利安装工作室。 但SQLCMD始终是一个选项。

更新:我已经尝试过sp_help,但只是产生一个logging显示名称,所有者,types和Created_Datetime。 有什么我失踪与sp_help?

这就是我所说的:

sp_help机场

请注意,我真的很想要定义表的DDL。

没有简单的方法来返回DDL。 但是,您可以从“ 信息架构视图”和“ 系统视图”中获取大部分详细信息 。

 SELECT ORDINAL_POSITION, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH , IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Customers' SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE WHERE TABLE_NAME = 'Customers' SELECT name, type_desc, is_unique, is_primary_key FROM sys.indexes WHERE [object_id] = OBJECT_ID('dbo.Customers') 

你有没有尝试过sp_help?

 sp_help 'TableName' 

使用这个小小的Windows命令行应用程序来获取任何表的CREATE TABLE脚本(带约束)。 我用C#写的。 只要编译它,并将其携带在记忆棒上。 也许有人可以把它移植到Powershell。

 using System; using System.Linq; using Microsoft.SqlServer.Management.Common; using Microsoft.SqlServer.Management.Smo; namespace ViewSource { public class ViewSource { public static void Main(string[] args) { if (args.Length != 6) { Console.Error.WriteLine("Syntax: ViewSource.exe <server>" + " <user> <password> <database> <schema> <table>"); } Script(args[0], args[1], args[2], args[3], args[4], args[5]); } private static void Script(string server, string user, string password, string database, string schema, string table) { new Server(new ServerConnection(server, user, password)) .Databases[database] .Tables[table, schema] .Script(new ScriptingOptions { SchemaQualify = true, DriAll = true }) .Cast<string>() .Select(s => s + "\n" + "GO") .ToList() .ForEach(Console.WriteLine); } } } 

访问http://www.stormrage.com/SQLStuff/sp_GetDDL_Latest.txt

您将findSQL Server的sp_getddl过程的代码。 该过程的目的是脚本的任何表,临时表或对象。

用法:

 exec sp_GetDDL GMACT 

要么

 exec sp_GetDDL 'bob.example' 

要么

 exec sp_GetDDL '[schemaname].[tablename]' 

要么

 exec sp_GetDDL #temp 

我在SQL Server 2012上testing了它,并且做得非常出色。

我不是程序的作者。 你对它的任何改进发送给洛厄尔Izaguirre(scripts@stormrage.com)。

我能想到的最简单快捷的方法就是使用sp_help

sp_help 'TableName'

 sp_help 'YourTableName' 

这将返回在表上定义的列,数据types和索引:

 --List all tables in DB select * from sysobjects where xtype = 'U' --Table Definition sp_help TableName 

这将返回在表上定义的触发器:

 --Triggers in SQL Table select * from sys.triggers where parent_id = object_id(N'SQLTableName') 

尝试sp_help存储过程。

sp_help <>

作为Barry的答案的补充。 sp_help本身也可以用来迭代特定数据库中的所有对象。 你的库中也有sp_helptext,这个脚本编写了程序化的元素,比如存储过程。

另一种方法是执行sp_columns过程。

 EXEC sys.sp_columns @TABLE_NAME = 'YourTableName' 

只需input表名并select它,然后按ATL + F1

假设你的表名是Customer然后打开一个新的查询窗口 ,键入并select表名并按下ALT + F1

它将显示表的完整定义。

@Anthony Faull对那些使用LINQPad的人的回答是:

 new Server(new ServerConnection(this.Connection.DataSource)) .Databases[this.Connection.Database] .Tables["<table>", "dbo"] ?.Script(new ScriptingOptions { SchemaQualify = true, DriAll = true, }) 

你需要引用2个程序集:

  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Smo.dll

并添加安东尼的片段中提到的名称空间引用。

 SELECT ORDINAL_POSITION, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH , IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'EMPLOYEES' 

由于SQL 2012,您可以运行以下语句:

 Exec sp_describe_first_result_set @tsql= N'Select * from <yourtable>' 

如果你input一个复杂的select语句(join,subselects等),它会给你结果集的定义。 这非常方便,如果您需要创build一个新表(或临时表),而您不想手动检查每个字段定义。

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-describe-first-result-set-transact-sql

“请注意,我确实需要定义表格的DDL。”

使用pg_dump:

 pg_dump -s -t tablename dbname 

它提供了普通SQL中的数据库"dbname"中某个表( -t表名)的表定义( -s仅为模式,无数据)。 另外你会得到序列,主键和约束信息。 你可以根据自己的需要检查和编辑输出,然后再input(相同的或另一个)Postgres数据库:

 pg_dump -s -t tablename dbname1 > /tmp/foo.sql psql -e dbname2 < /tmp/foo.sql 

这是针对UNIX / Linux的,但是我确定,Windows中也存在一个pg_dump。