এসকিউএল সার্ভার থেকে ডাটাবেসের তালিকা পান


381

আমি কীভাবে এসকিউএল সার্ভারে উপলব্ধ ডাটাবেসের তালিকা পেতে পারি? আমি তাদের তালিকা VB.NET এর একটি কম্বো বাক্সে তৈরি করার পরিকল্পনা করছি।

উত্তর:


614

এক্সিকিউট:

SELECT name FROM master.sys.databases

এটি এখন পছন্দসই পদ্ধতির পরিবর্তে dbo.sysdatabases, যা কিছু সময়ের জন্য অবচিত করা হয়েছে।


এই কোয়েরি কার্যকর করুন:

SELECT name FROM master.dbo.sysdatabases

বা আপনি যদি পছন্দ করেন

EXEC sp_databases

5
@ গিয়া এটি পিছনের দিকের সামঞ্জস্যতা দর্শন হিসাবে বিদ্যমান exist msdn.microsoft.com/en-us/library/ms179900%28v=SQL.110%29.aspx
ক্রিস ডাইভার

4
এক্সইসি এসপি_ডাটাবেসগুলি আমার জন্য কার্যকর করতে ধীর ছিল ; 36 সেকেন্ডে ডাটাবেস সহ 40 সেকেন্ড। সিসডাটাবেসগুলি থেকে নির্বাচন করা তাত্ক্ষণিক ছিল।
MarcE

10
@ ক্রিসডাইভার যা বলেছিলেন তার প্রসারিত করার জন্য: dbo.sysdatabases এর পরিবর্তে, সিএসইএফ নাম FROM sys.databases এখন পছন্দসই পদ্ধতি, যা এখন এক দশক ধরে অবহেলিত।
মীখা

3
কমপক্ষে এসকিউএল সার্ভারে 2014, exec sp_databasesকাজ করে নি। অন্য দুটি ( master.dbo.sysdatabasesএবং sys.databases) এখনও কাজ করে।
r2evans

86

অ-ব্যবহারকারীর ডাটাবেসের সংখ্যা সম্পর্কে অস্পষ্টতার আলোকে আপনার সম্ভবত যুক্ত করা উচিত:

WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb');

এবং প্রতিবেদনের পরিষেবা ডেটাবেসের নাম যুক্ত করুন


53

সিস্টেম ডাটাবেসগুলি বাদ দিতে:

SELECT [name]
FROM master.dbo.sysdatabases
WHERE dbid > 6

সম্পাদিত: 2:36 PM 2/5/2013

সঠিক ডাটাবেস_আইডের সাথে আপডেট হয়েছে, 1 থেকে 4 এর মধ্যে ডাটাবেস আইডি থাকা তালিকাভুক্ত সিস্টেম ডাটাবেসগুলি এড়ানো 4 এর চেয়ে বেশি হওয়া উচিত।

SELECT * 
FROM sys.databases d
WHERE d.database_id > 4

7
এটা কাজ করে না. সম্ভবত আপনি বোঝাতে> 4? টেবিল 5 এবং 6 টি ব্যবহারকারীর টেবিল।
বক্স ডেভেলপার এর বাইরে

1
দেখে মনে হচ্ছে এটি সর্বদা> 4 হওয়া উচিত, যদিও আমি যে সার্ভারটি যাচাই করছি তার 5 এবং 6 অবস্থানে "রিপোর্টার সার্ভার" এবং "রিপোর্টার সার্ভারটেম্পডিবি" রয়েছে।
1914 এ ট্রাইপড

আমার জন্য> 6 করতে হবে।
রব_2015

27
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 

আমাদের এসকিউএল সার্ভার ২০০৮ এ কাজ করে


ID5 এবং 6 সহ সিস্টেম ডেটাবেসগুলি হবে ReportServerএবং ReportServerTempDBযদি আপনি SQL Server Reporting Servicesইনস্টল করেন।
চার্লস হেপনার

22

যেহেতু আপনি। নেট ব্যবহার করছেন তাই আপনি এসকিউএল সার্ভার ম্যানেজমেন্ট অবজেক্ট ব্যবহার করতে পারেন

Dim server As New Microsoft.SqlServer.Management.Smo.Server("localhost")
For Each db As Database In server.Databases
    Console.WriteLine(db.Name)
Next

var SDBLOC = new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases.Cast<Microsoft.SqlServer.Management.Smo.Database>().Where(bs => !bs.IsSystemObject && bs.ID>6).ToList();
রব_2015

আমি সন্দেহ করি, এটি (লোকালহোস্ট) কিছু কনফিগারেশন ফাইল থেকে পড়ে। আমি এটি আমার "মাইহোস্ট" (যা আমার সঠিক হোস্টের নাম, পরিবেশে লেখা say
অজিব.কেপি

19

বিভ্রান্ত করবেন না, সমস্ত ডাটাবেসগুলি পেতে নীচের সাধারণ ক্যোয়ারীটি ব্যবহার করুন,

select * from sys.databases

আপনার যদি কেবলমাত্র ব্যবহারকারী সংজ্ঞায়িত ডাটাবেসগুলির প্রয়োজন হয়;

select * from sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb'); 

সিস্টেমের ডাটাবেসের কয়েকটি নাম (সংস্থান, বিতরণ, রিপোর্টসারিস, রিপোর্টসারিসটেম্পডিবি) কেবল এটি ক্যোয়ারিতে .োকান। ডিফল্ট হিসাবে আপনার মেশিনে যদি উপরের ডিবি থাকে।


7
SELECT [name] 
FROM master.dbo.sysdatabases 
WHERE dbid > 4 and [name] <> 'ReportServer' and [name] <> 'ReportServerTempDB'

এটি উভয় শর্তে কাজ করবে, প্রতিবেদন সক্ষম আছে কি না


1
সাবধান, যদি আপনার সার্ভারের নামকরণের উদাহরণ থাকে তবে রিপোর্ট সার্ভারের ডিবি নামগুলি রিপোর্টসভার $ ইনস্ট্যান্সনাম এবং রিপোর্টস সার্ভার $ ইনস্ট্যান্সনামটেম্পডিবি এর মতো। সুতরাং এটি, যে কোনও উপায়ে কাজ করবে: 4b এবং [নাম] 'রিপোর্ট সার্ভার%' পছন্দ করুন না
টর্ডকে

5

সিস্টেম ডাটাবেস নয় এবং স্ন্যাপশট নয় এমন ডাটাবেসগুলির একটি তালিকা পেতে আমি নিম্নলিখিত এসকিউএল সার্ভার ম্যানেজমেন্ট অবজেক্টস কোড ব্যবহার করি ।

using Microsoft.SqlServer.Management.Smo;

public static string[] GetDatabaseNames( string serverName )
{
   var server = new Server( serverName );
   return ( from Database database in server.Databases 
            where !database.IsSystemObject && !database.IsDatabaseSnapshot
            select database.Name 
          ).ToArray();
}

অনলাইনার: var DBsLOC = new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases.Cast<Microsoft.SqlServer.Management.Smo.Database>().Where(bs => !bs.IsSystemObject && bs.ID>6).ToList();অথবা foreach (var Db in new Microsoft.SqlServer.Management.Smo.Server("localhost").Databases)নেট নেট 4.0 + এসকিউএল সার্ভার ২০১৪ বা .এসকিএল সার্ভার.সোমো \ 12.0.0.0
রব_2015

2

আপনি যদি সিস্টেম ডেটাবেস এবং রিপোর্ট সার্ভার সারণী বাদ দিতে চান (যদি ইনস্টল থাকে):

select
            DATABASE_NAME   = db_name(s_mf.database_id)
             from
           sys.master_files s_mf
        where
            s_mf.state = 0 and -- ONLINE
            has_dbaccess(db_name(s_mf.database_id)) = 1
            and db_name(s_mf.database_id) NOT IN ('master', 'tempdb', 'model', 'msdb')
             and db_name(s_mf.database_id) not like 'ReportServer%'
        group by s_mf.database_id
        order by 1

এটি এসকিএল সার্ভার ২০০৮/২০১৪4 এ কাজ করে। বেশিরভাগ ক্যোয়ারী " এসপি_ড্যাটাবেসগুলি " সিস্টেম সঞ্চিত পদ্ধতি থেকে আসে । আমি কেবল অপ্রয়োজনীয় কলামটি সরিয়েছি এবং যেখানে শর্ত রয়েছে added


1

এসকিউএল সার্ভার 7-এ, ডিবিড 1 থ্রু 4 এর মাধ্যমে সিস্টেম ডিবিএস হয়।


1

নিশ্চিত না যে এটি রিপোর্ট সার্ভার ডেটাবেসগুলি বাদ দিবে যেহেতু আমি একটি চালাচ্ছি না, তবে যা আমি দেখেছি তা থেকে আমি এই এসকিউএল সহ সিস্টেম ব্যবহারকারীর মালিকানাধীন ডাটাবেসগুলি বাদ দিতে পারি:

    SELECT  db.[name] as dbname 
    FROM [master].[sys].[databases] db
    LEFT OUTER JOIN  [master].[sys].[sysusers] su on su.sid = db.owner_sid
    WHERE su.sid is null
    order by db.[name]

-1

সম্ভবত আমি একটি ডোডো!

show databases; আমার জন্য কাজ।


14
এসকিউএল সার্ভারে নেই
মার্টিন স্মিথ

1
আমার উত্তরটি আমাকে আবার সাহায্য করেছে। #blessed
thedanotto

এই আদেশটি আমার পক্ষেও কাজ করেছিল, অন্যান্য ফলাফল এমনকি ৫২৮ টি ভোট পেয়েও কার্যকর হয়নি।
ব্রানো

-4

এসকিউএল সার্ভার ২০০৮ আর 2 এ এটি কাজ করে:

select name 
from master.sys.databases 
where owner_sid > 1;

এবং শুধুমাত্র ব্যবহারকারী (গুলি) দ্বারা তৈরি ডেটাবেসগুলি তালিকাভুক্ত করুন।


10
সম্পাদনা: এটি এত ভুল! owner_sid=1মানে saমালিক, এটি সম্পর্কে বিশেষ কিছু নয়।
wqw

-4

আপনি এটির সাথে সমস্ত ডাটাবেসের নামগুলি খুঁজে পেতে পারেন: -

 select name from sys.sysdatabases

2
বছর পূর্বে পোস্ট করা উত্তরগুলিতে কিছু যোগ করে না
মার্টিন স্মিথ

-4

সিস্টেমের ডাটাবেসগুলি বাদ দিতে:

SELECT name FROM master.dbo.sysdatabases where sid <>0x01

এটি আমার বেশিরভাগ ডাটাবেসকে বাদ দিয়েছে।
জেফ

আপনি কোথায় ক্লজ যুক্ত করছেন? এটি সিস্টেমের ডেটাবেসগুলিকে বাদ দেবে, ওপি এটি চাইছে না। এবং পরের বার আপনি যদি একটি উত্তর যুক্ত করেন তবে কোয়েরিটি কী করে তা ব্যাখ্যা করুন। এবং তার পাশের টেবিলে কোনও sidকলাম নেই sys.databasesএটিরowner_sid
জর্ডি ভ্যান আইজক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.