كيف تبحث عن جمله (String) في جميع حقول جدول في SQL Server؟

14. جمادى الثانية 1429 08:50

 

السلام عليكم ورحمة الله وبركاته ...

كما هو في العنوان، نريد ان نبح عن جملة "String" في جدول معين، و لكن المشكلة هي أننا نريد البحث في جميع حقول هذا الجدول و ليس في حقل واحد ... لكي نجعل البحث عام بشكل أكبر ...

الحل هو استخدام الكود التالي، و هو ينشئ Stored Procedure داخل قاعدة البيانات Master باسم sp_FindStringInTable و تقوم هذه الدالة بالبحث عن جمله داخل جدول...

الدالة sp_FindStringInTable تأخذ ثلاثة متغيرات للبحث ... هي:

stringToFind و هي الجملة المراد البحث عنها ...

schema و هي الschema المراد البحث داخلها ...

table و هو الجدول المراد البحث داخله ...

سنقوم كما قلت بانشاء هذه الدالة داخل قاعدة البيانات Master لكي يمكن استخدامها في اي قاعدة بيانات تكون موجودة لديك ...

USE master
GO

CREATE PROCEDURE sp_FindStringInTable @stringToFind VARCHAR(100), @schema sysname, @table sysname
AS

DECLARE @sqlCommand VARCHAR(8000)
DECLARE @where VARCHAR(8000)
DECLARE @columnName sysname
DECLARE @cursor VARCHAR(8000)

BEGIN TRY
   SET @sqlCommand = 'SELECT * FROM ' + @schema + '.' + @table + ' WHERE'
   SET @where = ''

   SET @cursor = 'DECLARE col_cursor CURSOR FOR SELECT COLUMN_NAME
   FROM ' + DB_NAME() + '.INFORMATION_SCHEMA.COLUMNS
   WHERE TABLE_SCHEMA = ''' + @schema + '''
   AND TABLE_NAME = ''' + @table + '''
   AND DATA_TYPE IN (''char'',''nchar'',''ntext'',''nvarchar'',''text'',''varchar'')'

   EXEC (@cursor)

   OPEN col_cursor  
   FETCH NEXT FROM col_cursor INTO @columnName  

   WHILE @@FETCH_STATUS = 0  
   BEGIN  
       IF @where <> ''
           SET @where = @where + ' OR'

       SET @where = @where + ' ' + @columnName + ' LIKE ''' + @stringToFind + ''''
       FETCH NEXT FROM col_cursor INTO @columnName  
   END  

   CLOSE col_cursor  
   DEALLOCATE col_cursor

   SET @sqlCommand = @sqlCommand + @where
   --PRINT @sqlCommand
   EXEC (@sqlCommand)
END TRY
BEGIN CATCH
   PRINT 'There was an error'
   IF CURSOR_STATUS('variable', 'col_cursor') <> -3
   BEGIN
       CLOSE col_cursor  
       DEALLOCATE col_cursor
   END
END CATCH

الآن هذا الكو قام بانشاء الدالة sp_FindStringInTable .

و لكي نستخدمها من الممك ان نستخدم هذا الكود:

USE AdventureWorks
GO
EXEC sp_FindStringInTable '%land%', 'Person', 'Contact'

و لاحظ أننا استخدمنا علامة % و من الممكن أن نستخدم * أيضاً لتحديد البحث بشكل أكبر ...

 

أتمنىأن تكون هذه الدالة مفيدة ...

نصيحة شخصية: لا تستخدم هذا الأسلوب في البحث إلا في الضرورة القصوى، حاول أن تستخدم بحث محدد في حقول و جداول محددة و ذلك لرفع كفائة الإستعلام Query الذي تكتبه.

إن كنت تريد البحث باللغة العربية استبدل varchar بـ nvarchar.

 

طلال الحضبي.

المصدر: MSSQLTips.com

البطاقات: ,

التصنيفات: SQL Server | Database

اضف تعليق


(سوق يظهر لك Gravatar ايقونة)

  Country flag

biuquote
  • التعليق
  • مشاهدة
Loading



Powered by BlogEngine.NET
Theme by Mads Kristensen | Modified by Mooglegiant

البطاقات

BlogCumulus.net by Ryan Tomlinson and Roy Tanck requires Flash 9 and javascript

أحدث التعليقات

Comment RSS

إخلاء مسؤولية

جميع ما يكتب في المدونة يعبر عن رأيي الشخصي، و لا يمثل جهة عملي بأي حال من الأحوال
جميع الحقوق محفوظة، و يجوز إعادة نشر الموضوع بشرط الإشارة إلى المصدر

  الموقع غير مسؤول عن أي كود برمجي أو طريقة قد تضر بك بأي طريقة من الطرق
تأكد قبل تنفيذ الكود أو تجربة أي طريقة بأن تأخذ نسخة إحتياطية من الجهاز الذي تعمل عليه و طبقة في بيئة تجريبية قبل تطبيقة على البيئة العملية