什麼是將顯示完整定義的查詢,包括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