什么是将显示完整定义的查询,包括SQL Server表的索引和键?我想要一个纯粹的查询 - 并且知道SQL Studio可以给我这个,但我经常在只有最简单的应用程序的“野生”计算机上,我没有权利安装studio。但SQLCMD始终是一种选择。显示表定义的T-SQL查询?
更新:我试过sp_help,但只是产生一个记录显示名称,所有者,类型和Created_Datetime。有什么我失踪与sp_help?
这就是我所说的:
sp_help将机场
注意,我真的要定义表的DDL。
什么是将显示完整定义的查询,包括SQL Server表的索引和键?我想要一个纯粹的查询 - 并且知道SQL Studio可以给我这个,但我经常在只有最简单的应用程序的“野生”计算机上,我没有权利安装studio。但SQLCMD始终是一种选择。显示表定义的T-SQL查询?
更新:我试过sp_help,但只是产生一个记录显示名称,所有者,类型和Created_Datetime。有什么我失踪与sp_help?
这就是我所说的:
sp_help将机场
注意,我真的要定义表的DDL。
有没有简单的方法来返回DDL。但是,您可以从Information Schema Views和System Views获取大部分详细信息。
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')
谢谢。我开始怀疑得到这个的唯一方法是查询多个单独的表,并且这是SQL Studio在告诉它“生成DDL”时执行的操作。我很惊讶没有一般的SP会为你做。 – 2011-06-02 14:31:35
是的。如果你只想要列信息,你可以像我在我的回答中提到的那样执行'sp_columns'。如果你想获得关于FKs运行'sp_fkeys'的信息。如果你想知道索引,执行'sp_statistics'。 – 2011-06-02 16:12:37
我能想到的最简单,最快捷的方法是使用sp_help
sp_help 'TableName'
sp_help 'YourTableName'
尝试sp_help存储过程。
sp_help将<>
作为除了巴里的答案。 sp_help也可以用来自己迭代特定数据库中的所有对象。你的库中也有sp_helptext,它编写了程序化的元素,比如存储过程。
这将返回对表定义的列,数据类型和索引:
--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_columns程序。
EXEC sys.sp_columns @TABLE_NAME = 'YourTableName'
使用这个小的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);
}
}
}
聪明!谢谢。 – 2011-06-03 15:10:45
这不是T-SQL,虽然 – 2014-07-31 20:15:06
我不知道你会看到如果你使用SQL事件探查器来捕获这个启动的命令。 : - > – 2014-09-24 22:23:19
“请注意,我确实希望定义表的DDL。“
使用的pg_dump:
pg_dump -s -t tablename dbname
它给你的表定义(-s
的模式而已,没有数据)的 某个表(-t
表名)数据库"dbname"
纯SQL 另外,你会的。获取序列,主键和约束信息 根据您的需要,您可以根据需要检查和编辑输出结果 再次输入(相同或另一个)Postgres数据库:
pg_dump -s -t tablename dbname1 > /tmp/foo.sql
psql -e dbname2 < /tmp/foo.sql
这是针对UNIX/Linux的,但我确定,pg_dump也适用于Windows。
只需键入表的名称并选择它,然后按ATL + F1
说出你的表名Customer
然后打开一个新的查询窗口,类型并选择表的名称,然后按ALT + F1
它会显示表格的完整定义。
好的))但是对我来说,它显示了整个数据库的数据。我已经尝试了新的查询窗口,只有表名,并且它不起作用 - 它总是显示一切。否则,不错的提示:) – FrenkyB 2015-03-09 07:45:33
我用它与2008年和2012年,不知道旧版本,它总是为我工作,只是表名和ALT + F1,如果要使用该架构,然后'schema.table' 。 – 2015-03-09 19:15:06
这是sp_help'schema.tablename' – 2015-03-09 19:17:49
访问http://www.stormrage.com/SQLStuff/sp_GetDDL_Latest.txt。
您会发现SQL Server的sp_getddl
过程代码。 该过程的目的是脚本的任何表,临时表或对象。
用法:
exec sp_GetDDL GMACT
或
exec sp_GetDDL 'bob.example'
或
exec sp_GetDDL '[schemaname].[tablename]'
或
exec sp_GetDDL #temp
我TES把它放在SQL Server 2012上,它做得非常出色。
我不是程序的作者。您对它的任何改进都会发送给Lowell Izaguirre([email protected])。
@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个集:
并添加名称空间引用,如上所述安东尼的片段。
SELECT ORDINAL_POSITION, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
, IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'EMPLOYEES'
自2012年以来SQL可以运行下面的语句:
Exec sp_describe_first_result_set @tsql= N'Select * from <yourtable>'
如果输入一个复杂的select语句(连接,子查询,等等),它会给你的结果集的定义。这非常方便,如果您需要创建一个新表(或临时表)并且您不想手动检查每个字段定义。
我知道这是一个老问题,但正是我一直在寻找。因为我想对一些表进行批处理脚本,所以我重写了来自Anthony Faull for PowerShell的C#代码。
这一个是使用集成安全性:
Import-Module sqlps
$serverInstance = "<server>"
$database = "<database>"
$table = "<table>"
$schema = "<schema>"
$options = New-Object -TypeName Microsoft.SqlServer.Management.Smo.ScriptingOptions
$options.DriAll = $true
$options.SchemaQualify = $true
$connection = New-Object -TypeName Microsoft.SqlServer.Management.Common.ServerConnection `
-ArgumentList $serverInstance
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server `
-ArgumentList $connection
$server.Databases.Item($database).Tables.Item($table, $schema).Script($options) `
| ForEach-Object -Process { $_ + "`nGO"}
用户名和密码
在这里:
Import-Module sqlps
$serverInstance = "<server>"
$user = "<user>"
$password = "<pasword>"
$database = "<database>"
$table = "<table>"
$schema = "<schema>"
$options = New-Object -TypeName Microsoft.SqlServer.Management.Smo.ScriptingOptions
$options.DriAll = $true
$options.SchemaQualify = $true
$connection = New-Object -TypeName Microsoft.SqlServer.Management.Common.ServerConnection `
-ArgumentList $serverInstance
$connection.LoginSecure = $false
$connection.Login = $user
$connection.Password = $password
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server `
-ArgumentList $connection
$server.Databases.Item($database).Tables.Item($table, $schema).Script($options) `
| ForEach-Object -Process { $_ + "`nGO"}
你用'缺少什么sp_help'是返回多个结果集。您正在描述第一个结果集返回的列。 – 2011-06-02 14:40:52
好问题。来自MySQL的解决方案太短,因为在一个地方看不到列,索引,外键,约束名称。在对象浏览器中有很多数据库/表时,这是非常严重的。希望微软在未来解决这个问题。我没有使用任何生产力工具,但[SSMSBoost](http://www.ssmsboost.com/)看起来很有前途。 – 2013-10-10 15:28:23