سلام چطور میشه توی SQL Server , حالا به هر صورت ممکن مثل Query یا Store Procedure یک جستجو بر اساس یک مقدار برای تمامی نوع داده ای در تمام دیتابیس ها و تمام جداول اونها انجام داد
و نتیجه رو به این شکل نشون داد که که این 'مقدار شما' در این دیتابیس , در این جدول , در این ستون یافت شد !
نکته :
اعم از هر نوعی Any Data Type
مثال : میخوایم این مقدار : 15000 رو در تمام دیتابیس های SQL Server جستجو کنیم ( .... Database 1 , Database 2 ,Database300 )
که یعنی بره این مقدار رو در تمام ستون ها هر دیتابیس جستجو کنه و نتیجه رو نمایش بده
لطفا راهنمایی بفرمایید
باتشکر از توجه شما
ببینید نرم افزار رایگانی هست که با دانلود و نصب اون میتونید در تمام Sql Server هر آبجکتی رو که بخواید جست و جو کنید. یعنی هر جدول، ستون، Sp، تریگر، ایندکس و ...
ولی دقت کنید این نرم افزار برای جست و جو در آبجکت های دیتابیس هست نه برای جست و جو در اطلاعات و داده های دیتابیس
خب یک کوئری براتون قرار میدم که در واقع یک SP هست. با ایجاد این SP میتونید هر مقداری رو در اطلاعات یک دیتابیس جست و جو کنید. دقت کنید گفتم اطلاعات یک دیتابیس نه همه دیتابیس ها. دلیل اینکه میگم یک دیتابیس هم مشخصه. چون شما وقتی کوئری رو اجرا می کنید باید در داخل یک دیتابیس مشخص اجرا بشه. شما میتونید این SP رو توی همه دیتابیس ها ایجاد کنید و تک تک سرچ کنید.
CREATE PROCEDURE FindMyData_String
@DataToFind NVARCHAR(4000),
@ExactMatch BIT = 0
AS
SET NOCOUNT ON
DECLARE @Temp TABLE(RowId INT IDENTITY(1,1), SchemaName sysname, TableName sysname, ColumnName SysName, DataType VARCHAR(100), DataFound BIT)
INSERT INTO @Temp(TableName,SchemaName, ColumnName, DataType)
SELECT C.Table_Name,C.TABLE_SCHEMA, C.Column_Name, C.Data_Type
FROM Information_Schema.Columns AS C
INNER Join Information_Schema.Tables AS T
ON C.Table_Name = T.Table_Name
AND C.TABLE_SCHEMA = T.TABLE_SCHEMA
WHERE Table_Type = 'Base Table'
And Data_Type In ('ntext','text','nvarchar','nchar','varchar','char')
DECLARE @i INT
DECLARE @MAX INT
DECLARE @TableName sysname
DECLARE @ColumnName sysname
DECLARE @SchemaName sysname
DECLARE @SQL NVARCHAR(4000)
DECLARE @PARAMETERS NVARCHAR(4000)
DECLARE @DataExists BIT
DECLARE @SQLTemplate NVARCHAR(4000)
SELECT @SQLTemplate = CASE WHEN @ExactMatch = 1
THEN 'If Exists(Select *
From ReplaceTableName
Where Convert(nVarChar(4000), [ReplaceColumnName])
= ''' + @DataToFind + '''
)
Set @DataExists = 1
Else
Set @DataExists = 0'
ELSE 'If Exists(Select *
From ReplaceTableName
Where Convert(nVarChar(4000), [ReplaceColumnName])
Like ''%' + @DataToFind + '%''
)
Set @DataExists = 1
Else
Set @DataExists = 0'
END,
@PARAMETERS = '@DataExists Bit OUTPUT',
@i = 1
SELECT @i = 1, @MAX = MAX(RowId)
FROM @Temp
WHILE @i <= @MAX
BEGIN
SELECT @SQL = REPLACE(REPLACE(@SQLTemplate, 'ReplaceTableName', QUOTENAME(SchemaName) + '.' + QUOTENAME(TableName)), 'ReplaceColumnName', ColumnName)
FROM @Temp
WHERE RowId = @i
PRINT @SQL
EXEC SP_EXECUTESQL @SQL, @PARAMETERS, @DataExists = @DataExists OUTPUT
IF @DataExists =1
UPDATE @Temp SET DataFound = 1 WHERE RowId = @i
SET @i = @i + 1
END
SELECT SchemaName,TableName, ColumnName
FROM @Temp
WHERE DataFound = 1
GO
حالا مثلا می خواید کلمه Ali رو در کل اطلاعات دیتابیس جست و جو کنید :
exec FindMyData_string 'Ali', 0
دقت کنید این که یک کوئری بره توی همه دیتابیس ها بگرده به صورت طبیعی با ساختار دیتابیس نمیخونه. چون یک کوئری درون یک دیتابیس معنی پیدا میکنه. ما نمیتونیم یک کوئری داشته باشیم که درون هیچ دیتابیسی نباشه و به همه دیتابیس ها هم دسترسی داشته باشه. (البته میتونید با کمی تغییر در کوئری بالا کاری که میخواید انجام بدید رو ساده تر کنید.)
منبع
تاریخ :
1399/09/04
- ساعت :
06:18:00 PM
- بازدید :
6526
- پاسخ :
2
|
تاریخ :
1403/10/07
- ساعت :
03:12:00 PM
- بازدید :
201
- پاسخ :
2
|
تاریخ :
1403/09/06
- ساعت :
09:51:00 PM
- بازدید :
266
- پاسخ :
2
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1223
- پاسخ :
1
|
تاریخ :
1400/08/02
- ساعت :
02:35:00 PM
- بازدید :
2653
- پاسخ :
1
|
تاریخ :
1403/01/15
- ساعت :
04:12:00 PM
- بازدید :
890
- پاسخ :
2
|
تاریخ :
1402/10/18
- ساعت :
10:45:00 PM
- بازدید :
781
- پاسخ :
2
|
تاریخ :
1402/08/18
- ساعت :
08:43:00 AM
- بازدید :
1450
- پاسخ :
0
|
تاریخ :
1402/08/16
- ساعت :
09:45:00 PM
- بازدید :
1127
- پاسخ :
1
|
تاریخ :
1402/06/27
- ساعت :
12:27:00 PM
- بازدید :
1578
- پاسخ :
2
|
تاریخ :
1403/11/03
- ساعت :
07:34:00 PM
- بازدید :
57
- پاسخ :
0
|
تاریخ :
1399/12/20
- ساعت :
10:32:00 AM
- بازدید :
2518
- پاسخ :
1
|
تاریخ :
1398/08/09
- ساعت :
07:44:00 PM
- بازدید :
4857
- پاسخ :
1
|
تاریخ :
1399/09/20
- ساعت :
01:30:00 PM
- بازدید :
2575
- پاسخ :
1
|
تاریخ :
1403/11/03
- ساعت :
07:21:00 PM
- بازدید :
42
- پاسخ :
0
|
تاریخ :
1403/10/22
- ساعت :
12:29:00 PM
- بازدید :
86
- پاسخ :
1
|
تاریخ :
1399/09/20
- ساعت :
01:21:00 PM
- بازدید :
6647
- پاسخ :
1
|
تاریخ :
1403/11/02
- ساعت :
08:17:00 PM
- بازدید :
50
- پاسخ :
0
|
تاریخ :
1398/10/15
- ساعت :
08:02:00 PM
- بازدید :
2730
- پاسخ :
1
|
تاریخ :
1398/10/19
- ساعت :
02:01:00 PM
- بازدید :
3091
- پاسخ :
2
|