更新:我尝试过sp_help,但它只产生一个记录,显示名称、所有者、类型和创建日期时间。我是否遗漏了其他内容?
以下是我调用的内容:
sp_help airports
请注意,我确实想要定义表的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')
sp_columns
。如果您想获取有关外键的信息,请运行sp_fkeys
。如果您想了解索引,请执行sp_statistics
。 - user532231你尝试过使用 sp_help 吗?
sp_help 'TableName'
访问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
我在 SQL Server 2012 上测试了它,效果很好。
我不是这个过程的作者。如果您对它进行任何改进,请发送至 Lowell Izaguirre (scripts@stormrage.com)。
自从 SQL 2012,您可以运行以下语句:
Exec sp_describe_first_result_set @tsql= N'Select * from <yourtable>'
如果您输入一个复杂的select语句(包括连接、子查询等),它将为您提供结果集的定义。如果您需要创建新表格(或临时表格),并且不想手动检查每个字段的定义,这非常方便。
使用这个小的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);
}
}
}
sp_help 'YourTableName'
--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')
我知道这是一个老问题,但正是我在寻找的东西。因为我想批处理一些表格,所以我将Anthony Faull的C#代码重新编写成了PowerShell脚本。
下面的代码使用了Integrated Security:
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"}
只需输入表名并选择它,然后按下ALT + F1
假设您的表名是Customer
,那么打开一个新查询窗口,键入并选择表名,然后按ALT + F1
它将显示表的完整定义。
sp_help
时可能忽略了它会返回多个结果集。你所描述的是第一个结果集返回的列。 - Joe Stefanelli