دسته بندی ها
19:06 1400/05/15

نمایش لیستی از دیتابیس های موجود در Sql Server با نام فارسی

مشخصات سوال کننده :
کاربر : Hooniras     امتیاز کاربر : ‎−1     رتبه کاربر : 7101
دسته بندی : سی شارپ Sql Server Entity Framework

به این سوال امتیاز بدهید    ‎−1
تعداد بازدید این سوال : 5860
1 نظر
saedbfd : سوالتون خیلی گنگ هست. لطفا توضیحات بیشتر به همراه مثال و یا تصویر که دقیق خواسته شما رو نشان بده ارائه بدید.

امتیاز کاربر : 1664   رتبه کاربر : 1   تاریخ ثبت : 03:38 1400/05/16
هوش مصنوعی

پاسخ هوش مصنوعی

برای نمایش لیستی از دیتابیس های موجود در SQL Server به همراه نام فارسی آن ها، می توانید از SQL Query زیر استفاده کنید. فرض بر این است که در هر دیتابیس جدولی با نام مشخص (برای مثال، DatabaseInfo) وجود دارد که شامل فیلدهای لازم است.


DECLARE @dbName NVARCHAR(255)
DECLARE @sql NVARCHAR(MAX)

CREATE TABLE #Results (DatabaseName NVARCHAR(255), PersianName NVARCHAR(255), StartDate DATE, EndDate DATE)

DECLARE db_cursor CURSOR FOR 
SELECT name 
FROM sys.databases 

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @dbName  

WHILE @@FETCH_STATUS = 0  
BEGIN  
    SET @sql = 'USE [' + @dbName + ']; 
                INSERT INTO #Results (DatabaseName, PersianName, StartDate, EndDate)
                SELECT [DatabaseName],[PersianName],[StartDate],[EndDate] 
                FROM DatabaseInfo' 
                
    EXEC sp_executesql @sql
    FETCH NEXT FROM db_cursor INTO @dbName  
END  

CLOSE db_cursor  
DEALLOCATE db_cursor  

SELECT * FROM #Results
DROP TABLE #Results

این کد ابتدا یک جدول موقت به نام #Results ایجاد می کند که شامل اطلاعات دیتابیس ها خواهد بود. سپس از یک کرسر برای حلقه زدن روی تمام دیتابیس ها استفاده می کند و به هر دیتابیس سوییچ می کند تا اطلاعات مربوط به جدول DatabaseInfo را استخراج کند. در نهایت، نتایج را در جدول موقت انتخاب کرده و در خروجی نمایش می دهد.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : pedram_khan 23:55 1400/05/18

نمایش لیست دیتابیس های موجود در Sql Server

ببینید در دیتابیس master یک جدول به نام databases وجود داره که شما هر دیتابیسی که در Sql Server ایجاد می کنید مشخصات و نام اون دیتابیس در این جدول ثبت و نگهداری میشه.

SELECT * FROM master.sys.databases

خروجی :

نمایش لیست دیتابیس های موجود در sql server

 

اما طبق توضیحات و تصاویری که شما ارسال کردید به نظر میاد از یک جدول که خود کاربر ایجاد کرده استفاده شده. یعنی یک جدول با فیلدهای مورد نیاز ایجاد شده و هر دیتابیسی که ایجاد شده اطلاعاتش رو در این جدول ثبت کردن و نمایش دادن.

دقت کنید 4 تا دیتابیس به صورت ثابت در همه Sql Server ها وجود داره که شما میتونید این 4 تا رو نمایش ندید :

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

توسط کد بالا فقط دیتابیس هایی که خودتون ایجاد کردید نمایش داده میشه.

به این پاسخ امتیاز بدهید    0
امتیاز: 277 رتبه: 6
پاسخ دهنده : Hooniras 03:29 1400/05/19

ممنون از توضیحتون بله میدونم جداول موجود در Sql رو تا حد خوبی آشنایی دارم ، دقیقا درست متوجه شدید جدولی در هر دیتا بیس ایجاد شده و من میخوام لیست دیتابیس ها به همراه فیلدهای همون جدول که در هر دیتابیس ایجاد شده  در یک کوئری کنار هم نمایش داده شوند ؟!

باتشکر از توجه شما 

به این پاسخ امتیاز بدهید    0
امتیاز: ‎−1 رتبه: 7101
پاسخ دهنده : saedbfd 14:48 1400/05/19

دوستان تقریبا پاسخ شما رو دادن اما اگر شما چند دیتابیس دارید که یک جدول مشترک درون همه اونها هست و میخواید اطلاعات اون جدول رو داشته باشید یکی از راه حل ها این هست که برای اون جدول یک schema اختصاصی ایجاد کنید. بعد از اون میتونید یک query از جداولی در دیتابیس بگیرید که اون schema رو دارن. به تصویر زیر دقت کنید :

 

ایجاد schema در sql server

 

در تصویر بالا dbo همون schema هست. شما میتونید هر schema دیگه ای هم تعریف کنید. مثلا میتونید داشته باشید :

Select * From myschema.Users

در مثال بالا myschema یک schema اختصاصی و جدید هست.

 

نمایش لیست همه جداول موجود در Sql Server در دیتابیس

خب حالا که در هر دیتابیس یک جدول با Schema اختصاصی دارید میتونید به صورت زیر لیست اونها رو داشته باشید و یا باهاشون کار کنید :

 

select *
from sys.tables
where schema_name(schema_id) = 'myschema' -- put your schema name here
order by name;

در دیتابیس master و جدول tables لیست همه جداول در Sql Server شما موجود هست.

ویرایش شده در چهارشنبه 20 مرداد 1400 ساعت 23:37:42
به این پاسخ امتیاز بدهید    0
امتیاز: 1664 رتبه: 1
پاسخ دهنده : Hooniras 22:05 1400/05/19

ممنون از شما و دوستان

مهندس جان من خودم به این کوئری رسیدم ولی این یه مشکل گاهی برام ایجاد میکنه و اون اینه که اگر روی سیستمی در یک اینستنس دیتابیسی همنام یا شبیه نام دیتابیس ها من موجود باشه ولی در اون جدولی مانند جدول دیتابیس من وجود نداشته باشه کوئری با خطا مواجه میشه و کلا اجرا نمیشه .


CREATE TABLE #TempTable
(
  DatabaseName VARCHAR(100),
  TableName varchar(100),
  List_of_Columns VARCHAR(100)
);
GO
INSERT INTO #TempTable
EXEC sp_MSforeachdb 
'
USE [?]
DECLARE @DbName NVARCHAR(128);
SET @DbName = DB_NAME(DB_ID());
SELECT
  @DbName  AS DB,
  [Name]  AS Name,
  (SELECT STRING_AGG(COLUMN_NAME,''\'') AS List_of_Columns
    FROM INFORMATION_SCHEMA.COLUMNS
      WHERE TABLE_NAME = ''TblSetting''
    GROUP BY TABLE_NAME) as x
FROM sys.tables
  WHERE  [type] = ''U''
  AND
  DB_ID() > 4
  AND [NAME] = ''TblSetting''
';
GO
SELECT  * FROM #TempTable;
GO 

به هر حال مهندس جان اگر پیشنهاد و راه حل بهتری برای نمایش سالها و دیتابیس ها دارید و باید در دیتابیس تغییرات ابجاد کنم من تغییرات در دیتابیس اعمال میکنم .

در هر صورت ممنون از پیگیری و راهنمایی ها 

ویرایش شده در چهارشنبه 20 مرداد 1400 ساعت 00:46:00
به این پاسخ امتیاز بدهید    0
امتیاز: ‎−1 رتبه: 7101
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود