جستجوی عنوان در تمامی جداول دیتابیس

احتمالا به عنوان یک  dba یا کارشناس دیتابیس براتون پیش اومده که بخواهید دنبال یک عنوان توی چند تا جدول باشید یا دنبال عنوانی باشید که ندونید تو کدوم جدول هست !

بیل گیتس هم یه جمله داره که میگه:

” من معمولا سخت ترین کارهارو به تنبل ترین آدم ها میدم چون ساده ترین راهکارهارو انتخاب میکنند! “

من هم به عنوان نماینده اون افرادی که گفت، احساس مسئولیت کردم و قدمی در راهبرد و راحتی باقی صنف برداشتم.

نتیجه کار یک Procedure هست که اول از همه لازمه توی اون دیتابیسی که میخواهید تنبلیتونو بهش ثابت کنید بسازیدش:

CREATE PROCEDURE SP_SearchAllTables
(
@SearchStr nvarchar(100)
)
AS
BEGIN

CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')

WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = ۰
/*اگر به مشکل خوردید، عبارت بالا مساوی عدد صفر هست*/

)

WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)

IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO #Results
EXEC
(
'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)
FROM ' + @TableName + ' (NOLOCK) ' +
' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
)
END
END
END

SELECT ColumnName, ColumnValue FROM #Results
END

 

نکته بعدی صدا زدن Procedure ساخته شده با پارامتری که میخواهیم جستجو کنیم هست:

 

EXEC SP_SearchAllTables 'YourParametr'

 

 

نکته باقی مونده اینه که لذتش رو ببرید و موفق باشید

 

نظرات

  • امیر
    پاسخ

    تو مایه افتخار صنف مایی

    • soroush

      خوشحالم که باعث سربلندی شما هستم :))

1 − یک =