sourcecode

테이블 정의를 표시하기 위한 T-SQL 쿼리?

copyscript 2023. 6. 28. 21:55
반응형

테이블 정의를 표시하기 위한 T-SQL 쿼리?

SQL Server 테이블에 대한 인덱스 및 키를 포함한 전체 정의를 표시하는 쿼리란 무엇입니까?저는 순수한 질문을 원합니다. SQL Studio에서 이 질문을 받을 수 있지만, 저는 종종 가장 기본적인 앱만 있는 "와일드" 컴퓨터에 있으며 스튜디오를 설치할 권한이 없습니다.하지만 SQLCMD는 항상 옵션입니다.

업데이트: sp_help를 시도해 보았지만 Name, Owner, Type 및 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'

http://www.stormrage.com/SQLStuff/sp_GetDDL_Latest.txt 을 방문하세요.

당신은 다음코드찾수다있니의 수 입니다.sp_getddlSQL Server에 대한 프로시저입니다.이 절차의 목적은 테이블, 임시 테이블 또는 개체를 스크립팅하는 것입니다.

용도:

exec sp_GetDDL GMACT

또는

exec sp_GetDDL 'bob.example'

또는

exec sp_GetDDL '[schemaname].[tablename]'

또는

exec sp_GetDDL #temp

SQL Server 2012에서 테스트해 본 결과 매우 효과적이었습니다.

저는 그 과정의 저자가 아닙니다.개선 사항이 있으면 로웰 이자기레(scripts@stormrage.com )로 보내 주십시오.

내가 생각할 수 있는 가장 쉽고 빠른 방법은 sp_help를 사용하는 것입니다.

sp_help 'TableName'

이 작은 Windows 명령줄 앱을 사용하여 다음과 같은 기능을 사용할 수 있습니다.CREATE TABLE모든 테이블에 대한 스크립트(제약 조건 포함).C#으로 작성했습니다.그냥 컴파일해서 메모리 스틱에 들고 다니기만 하면 됩니다.아마도 누군가 파워셸에 이식할 수 있을 것입니다.

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);
        }
    }
}

SQL 2012 이후 다음 문을 실행할 수 있습니다.

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

복합 선택 문(결합, 하위 선택 등)을 입력하면 결과 집합의 정의가 제공됩니다.새 테이블(또는 임시 테이블)을 만들어야 하고 모든 필드 정의를 수동으로 확인하지 않으려는 경우 이 기능이 매우 유용합니다.

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

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용으로 다시 작성했습니다.

이것은 통합 보안을 사용하는 것입니다.

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"}

테이블 이름을 입력하고 선택한 후 ATL + F1을 누릅니다.

테이블 이름을 다음과 같이 입력합니다.Customer그런 다음 새 쿼리 창을 열고 테이블 이름을 입력하고 선택한 다음 Alt + F1을 누릅니다.

테이블의 전체 정의가 표시됩니다.

LINQPad를 사용하는 사용자에 대한 @Anthony Faull의 답변 변형:

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

두 개의 어셈블리를 참조해야 합니다.

  • 마이크로소프트.SqlServer.ConnectionInfo.dll
  • 마이크로소프트.SqlServer.Smo.dll

Anthony의 스니펫에 언급된 네임스페이스 참조를 추가합니다.

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

sp_help 저장 프로시저를 사용해 보십시오.

sp_help <>

또 다른 방법은 sp_columns 프로시저를 실행하는 것입니다.

EXEC sys.sp_columns @TABLE_NAME = 'YourTableName'

배리의 대답에 덧붙여.sp_help를 사용하여 특정 데이터베이스의 모든 개체를 반복할 수도 있습니다.또한 저장 프로시저와 같은 프로그램 요소를 스크립트로 작성하는 무기용 sp_help 텍스트도 있습니다.

일반 테이블 정의는 저장 프로시저를 사용하여 표시됩니다.sp_help앞서 말한 바와 같이:

sp_help 'table_name_in_current_db_db'

여러 컨텍스트의 테이블을 사용하는 경우 위의 명령어를 원하는 컨텍스트로 접두사로 지정하는 것이 유용합니다.use db_xyz:

DB_Products..sp_help 'MyTable' -- DB_Products의 MyTable을 정의합니다.

또한 다음과 같은 임시 테이블에서도 작동합니다.

tempdb..sp_help '#TempTable' - 현재 컨텍스트에서 #TempTable을 정의합니다.

데이터베이스 개체에 대한 DDL 스크립트를 쉽게 가져올 수 있는 방법이 있습니다.

  1. SQL Server Management Studio 열기
  2. 원본 데이터베이스 서버에 연결합니다.
  3. 데이터베이스 트리를 확장합니다.
  4. 내보낼 테이블이 있는 데이터베이스를 마우스 오른쪽 단추로 클릭합니다.
  5. 하위 메뉴에서 "태스크"를 확장합니다.
  6. 하위 메뉴에서 "스크립트 생성..."을 선택합니다.."
  7. 마법사를 사용하여 내보낼 개체를 선택합니다.
  8. 스크립팅 옵션의 경우 개체당 하나의 스크립트를 선택합니다.

선택한 모든 테이블, 보기, 저장된 프로시저, 사용자, 역할 또는 스키마에 대한 파일을 내보냅니다.그것을 목적지 컴퓨터로 가져가세요.

언급URL : https://stackoverflow.com/questions/6215459/t-sql-query-to-show-table-definition

반응형