টেবিল সংজ্ঞা দেখানোর জন্য টি-এসকিউএল কোয়েরি?


105

এসকিউএল সার্ভার টেবিলের জন্য সূচি এবং কীগুলি সহ আমাকে পুরো সংজ্ঞাটি প্রদর্শন করবে এমন একটি কোয়েরি কী? আমি একটি বিশুদ্ধ জিজ্ঞাসা চাই - এবং জানি যে এসকিউএল স্টুডিওটি এটি আমাকে দিতে পারে তবে আমি প্রায়শই "বন্য" কম্পিউটারে থাকি যেখানে কেবল সবচেয়ে হাড়ের অ্যাপ্লিকেশন রয়েছে এবং স্টুডিও ইনস্টল করার আমার কোনও অধিকার নেই। তবে এসকিউএলসিএমডি সর্বদা একটি বিকল্প।

আপডেট: আমি স্প_হেল্প চেষ্টা করেছি, তবে কেবল একটি রেকর্ড পেয়েছে যা নাম, মালিক, টাইপ এবং তৈরি_সামগ্রী দেখায়। এসপি_হেল্পের সাথে আমি আর কিছু মিস করছি?

আমি যা বলি তা এখানে:

sp_help বিমানবন্দরগুলি

নোট করুন যে আমি সত্যিই ডিডিএল চাই যা টেবিলটি সংজ্ঞায়িত করে।


1
আপনি যা হারিয়েছেন sp_helpতা হ'ল এটি একাধিক ফলাফলের সেট দেয়। আপনি প্রথম ফলাফল সেট দ্বারা ফিরে আসা কলামগুলি বর্ণনা করছেন।
জো স্টেফেনেলি

1
ভাল প্রশ্ন. মাইএসকিউএল থেকে আসা, সমাধানগুলি খুব ছোট হয়ে যায়, কারণ কলাম, সূচিপত্র, বিদেশী কী, সীমাবদ্ধতার নামগুলি সমস্ত এক জায়গায় দেখতে পারে না। যখন আপনার অবজেক্ট এক্সপ্লোরারে আপনার কাছে অনেকগুলি ডাটাবেস / টেবিল থাকে তখন এটি গুরুতর। আশা করি মাইক্রোসফ্ট ভবিষ্যতে এটিকে সুরাহা করবে। আমি কোনও উত্পাদনশীলতা সরঞ্জাম ব্যবহার করি নি তবে এসএসএমএস বুস্ট আশাব্যঞ্জক বলে মনে হচ্ছে।
পিটার এন

1
@ মাইক্রোসফ্ট দয়া করে মাইএসকিউএল এর মতো ডিইএসসি টেবিল যুক্ত করুন। সহজ। সহজ। সম্পন্ন.
পিট অ্যালভিন

উত্তর:


127

ডিডিএল ফেরত দেওয়ার সহজ কোনও উপায় নেই। তবে আপনি তথ্য স্কিমার ভিউ এবং সিস্টেম ভিউ থেকে বেশিরভাগ বিবরণ পেতে পারেন ।

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')

1
ধন্যবাদ. আমি সন্দেহ করতে শুরু করেছিলাম যে এটির একমাত্র উপায় হ'ল বিভিন্ন পৃথক টেবিলের অনুসন্ধান করা এবং আপনি যখন "ডিডিএল তৈরি করতে" বলবেন তখন এসকিউএল স্টুডিও এটিই করে। আমি কিন্তু আশ্চর্য এমন কোনও সাধারণ এসপি নেই যা আপনার পক্ষে এটি করবে।
ড্যানিয়েল উইলিয়ামস

6
এইটা. আপনি যদি কেবল কলামের তথ্য চান তবে sp_columnsআমার উত্তরে আমি যেমন উল্লেখ করেছি তেমন কার্যকর করতে পারেন । আপনি যদি এফকে চালনা সম্পর্কে তথ্য চান sp_fkeys। আপনি যদি সূচীগুলি জানতে চান, কার্যকর করুন sp_statistics

69

আপনি কি sp_help চেষ্টা করেছেন?

sp_help 'TableName'

1
এটি কাঠামো, প্রতিবন্ধকতাগুলি, কনট্রিন্টের প্রকারগুলি ইত্যাদি দেখায় কেবল একটি বিষয় লক্ষণীয়: আপনাকে অবশ্যই ডেটেবলের পুরো নাম লিখতে হবে। Schema.TableName। অন্যথায়, এটি সম্পূর্ণরূপে সমস্যার সমাধান করে এবং সারণী সম্পর্কে সমস্ত তথ্য দেয়।
ফ্রেনকিবি

1
পুরো পথটি লিখেও টেবিলের ডিডিএল ফিরিয়ে দেয় না।
কোভগেক

25

পরিদর্শন http://www.stormrage.com/SQLStuff/sp_GetDDL_Latest.txt

আপনি sp_getddlএসকিউএল সার্ভারের পদ্ধতির কোডটি পাবেন । পদ্ধতির উদ্দেশ্য হ'ল কোনও টেবিল, টেম্প টেবিল বা বস্তুর স্ক্রিপ্ট।

ব্যবহার:

exec sp_GetDDL GMACT

অথবা

exec sp_GetDDL 'bob.example'

অথবা

exec sp_GetDDL '[schemaname].[tablename]'

অথবা

exec sp_GetDDL #temp

আমি এটি এসকিউএল সার্ভার 2012 এ পরীক্ষা করেছি এবং এটি একটি দুর্দান্ত কাজ করে does

আমি প্রক্রিয়াটির লেখক নই। আপনি এতে যে কোনও উন্নতি করেন তা লোয়েল ইজাগুইয়ারে (স্ক্রিপ্টস @ স্টর্মারেজ ডটকম) প্রেরণ করে।


এই স্ক্রিপ্ট এবং ভাগ করে নেওয়ার জন্য আপনাকে ধন্যবাদ! আমি জিজ্ঞাসা করব, আপনার কি এমন কোনও পোস্ট আছে যেখানে আমরা এই স্ক্রিপ্টটি নিয়ে আলোচনা করতে পারি?
বেলাশ

অসাধারণ! MSFT ভিতরে ম্যানেজমেন্ট স্টুডিও যেমন ফাংশন থাকা আবশ্যক
tertium


18

এই ছোট্ট উইন্ডোজ কমান্ড-লাইন অ্যাপ্লিকেশনটি ব্যবহার করুন যা CREATE TABLEকোনও সারণীর জন্য স্ক্রিপ্ট (সীমাবদ্ধতার সাথে) পায় । আমি এটি সি # তে লিখেছি। কেবল এটি সংকলন করুন এবং এটি একটি মেমরি স্টিকের উপরে বহন করুন। সম্ভবত কেউ এটিকে পাওয়ারশেলের কাছে পোর্ট করতে পারে।

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

2
এটি টি-এসকিউএল নয়
ivan_pozdeev

আমি অবাক হয়েছি আপনি কী দেখতে পাচ্ছেন যদি আপনি এসকিউএল প্রোফাইলারকে এই লাথি মেরে দেওয়া আদেশগুলি ক্যাপচার করতে ব্যবহার করেন। : ->
পল স্মিথ

। শুধু যোগ যে এই যে কোনো সিডিসি টেবিল :( যেমন বর্তমানে Smo সমর্থিত নয় করবে না স্ক্রিপ্ট চেয়েছিলেন
এইচ আব্রাহাম শ্যাভেজ

আমি একটি পাওয়ারশেল পোর্ট সহ একটি উত্তর যুক্ত করেছি। আশা করি এটি কারও সাহায্য করবে।
আর হবার


6

এটি টেবিলে সংজ্ঞায়িত কলাম, ডেটাটাইপ এবং সূচকগুলি ফিরিয়ে দেবে:

--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') 

6

এসকিউএল ২০১২ সাল থেকে আপনি নিম্নলিখিত বিবৃতি চালাতে পারেন:

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

আপনি যদি কোনও জটিল সিলেক্ট স্টেটমেন্ট (যোগদান, সাবলেট, ইত্যাদি) প্রবেশ করেন তবে এটি আপনাকে ফলাফলের সংজ্ঞার সংজ্ঞা দেবে। এটি খুব সহজ, যদি আপনার একটি নতুন টেবিল (বা টেম্প টেবিল) তৈরি করতে হয় এবং আপনি প্রতিটি একক ক্ষেত্রের সংজ্ঞাটি ম্যানুয়ালি পরীক্ষা করতে চান না।

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


4

কেবল টেবিলের নামটি টাইপ করুন এবং এটি নির্বাচন করুন এবং এটিএল + এফ 1 টিপুন

আপনার সারণীর নামটি বলুন Customerতারপরে একটি নতুন ক্যোয়ারী উইন্ডোটি খুলুন , টাইপ করুন এবং সারণির নামটি নির্বাচন করুন এবং ALT + F1 টিপুন

এটি টেবিলের সম্পূর্ণ সংজ্ঞা প্রদর্শন করবে।


ভাল এক)) তবে আমার জন্য এটি পুরো ডাটাবেসের ডেটা দেখায়। আমি এতে সারণির নাম সহ নতুন ক্যোয়ারী উইন্ডোজ চেষ্টা করেছি এবং এটি কার্যকর হয় না - এটি সর্বদা সব কিছু দেখায়। অন্যথায়, সুন্দর টিপ :)
ফ্রেইনিবি

আমি এটি ২০০৮ এবং ২০১২ সালে ব্যবহার করেছি, পুরানো সংস্করণ সম্পর্কে নিশ্চিত নয় এবং এটি সর্বদা আমার জন্য কাজ করে, কেবল টেবিলের নাম এবং ALT + F1, যদি স্কিমা ব্যবহার করতে চান তবে 'স্কিমা.ট্যাবিল'।
আলী আদ্রবী

এটি sp_help 'স্কিমা.ট্যাবিলাম'
আলী আদ্রভী

2
আমি নির্বাচন করার সময় কাজ করেছি table টেবিলের নামটি হাইলাইট করে। কোয়েরি উইন্ডোতে অন্য কিছু থাকলে সম্পূর্ণ ডাটাবেস দেখিয়েছিল।
ডিবি টেক

3

লিনকিউপ্যাড যারা ব্যবহার করেন তাদের জন্য @ অ্যান্থনি ফলের উত্তরের একটি পরিবর্তন:

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

আপনাকে ২ টি অ্যাসেমব্লী উল্লেখ করতে হবে:

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

এবং অ্যান্টনির স্নিপেটে উল্লিখিত নেমস্পেসের রেফারেন্স যুক্ত করুন।


3

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে ঠিক আমি যা খুঁজছিলাম। যেহেতু আমি স্ক্রিপ্টের কয়েকটি টেবিলটি স্ক্রিপ্ট করতে চাই, আমি পাওয়ারশেলের জন্য অ্যান্টনি ফলের কাছ থেকে সি # কোডটি আবার লিখলাম।

এটি একীভূত সুরক্ষা ব্যবহার করে:

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

2

Sp_help সঞ্চিত পদ্ধতি ব্যবহার করে দেখুন।

sp_help <>


2

ব্যারি এর উত্তর সংযোজন হিসাবে। Sp_help এছাড়াও একটি নির্দিষ্ট ডাটাবেসের সমস্ত বস্তুর পুনরাবৃত্তি করতে নিজেই ব্যবহার করা যেতে পারে। আপনার অস্ত্রাগারের জন্য আপনার sp_helptext রয়েছে, যা সঞ্চিত পদ্ধতিগুলির মতো প্রোগ্রামেটিক উপাদানগুলিকে স্ক্রিপ্ট করে।


2

আর একটি উপায় হল sp_collines পদ্ধতি চালানো ।

EXEC sys.sp_columns @TABLE_NAME = 'YourTableName'


-5

"নোট করুন যে আমি সত্যিই ডিডিএল চাই যা টেবিলটি সংজ্ঞায়িত করে।"

pg_dump ব্যবহার করুন:

pg_dump -s -t tablename dbname

এটি আপনাকে প্লেইন এসকিউএলে ডাটাবেসে -sএকটি নির্দিষ্ট টেবিলের টেবিল সংজ্ঞা ( কেবলমাত্র স্কিমা, কোনও ডেটা নয়) দেয় । অতিরিক্তভাবে আপনি ক্রম, প্রাথমিক কী এবং সীমাবদ্ধতার তথ্য পাবেন। আপনার প্রয়োজনীয়তা অনুযায়ী যাচাই বাছাই করে সম্পাদনা করার পরে আপনি যে আউটপুটটি দেখতে পারেন তা আবার পোস্ট করা যাবে (একই বা অন্য কোনও) পোস্টগ্রিস ডাটাবেসে:-t"dbname"

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

এটি ইউনিক্স / লিনাক্সের জন্য, তবে আমি নিশ্চিত, উইন্ডোজের জন্যও একটি পিজি_ডাম্প বিদ্যমান।


1
না! এটি মাইক্রোসফ্ট এসকিউএল সার্ভারের জন্য নয় পোস্টগ্রিজের জন্য।
চিহ্নিত করুন

3
প্রশ্নে নির্দিষ্ট করা পুরো প্ল্যাটফর্ম এবং ডাটাবেস ইঞ্জিন উপেক্ষা করা। খুশী হলাম।
জেরেমি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.