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

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

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

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

امتیاز کاربر : 1654   رتبه کاربر : 1   تاریخ ثبت : 03:38 1400/05/16
پاسخ دهنده : 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 رتبه: 7059
پاسخ دهنده : 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
امتیاز: 1654 رتبه: 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 رتبه: 7059
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود