كيف تبحث عن جمله (String) في جميع حقول جدول في SQL Server؟
كتب بواسطة Talal | مصنف تحت Database, SQL Server
السلام عليكم ورحمة الله وبركاته …
كما هو في العنوان، نريد ان نبح عن جملة “String” في جدول معين، و لكن المشكلة هي أننا نريد البحث في جميع حقول هذا الجدول و ليس في حقل واحد … لكي نجعل البحث عام بشكل أكبر …
الحل هو استخدام الكود التالي، و هو ينشئ Stored Procedure داخل قاعدة البيانات Master باسم sp_FindStringInTable و تقوم هذه الدالة بالبحث عن جمله داخل جدول…
الدالة sp_FindStringInTable تأخذ ثلاثة متغيرات للبحث … هي:
stringToFind و هي الجملة المراد البحث عنها …
schema و هي الschema المراد البحث داخلها …
table و هو الجدول المراد البحث داخله …
سنقوم كما قلت بانشاء هذه الدالة داخل قاعدة البيانات Master لكي يمكن استخدامها في اي قاعدة بيانات تكون موجودة لديك …
</p> <p> USE master<br /> GO </p> <p> CREATE PROCEDURE sp_FindStringInTable @stringToFind VARCHAR(100), @SCHEMA sysname, @TABLE sysname<br /> AS </p> <p> DECLARE @sqlCommand VARCHAR(8000)<br /> DECLARE @WHERE VARCHAR(8000)<br /> DECLARE @columnName sysname<br /> DECLARE @CURSOR VARCHAR(8000) </p> <p> BEGIN TRY<br /> SET @sqlCommand = 'SELECT * FROM ' + @SCHEMA + '.' + @TABLE + ' WHERE'<br /> SET @WHERE = '' </p> <p> SET @CURSOR = 'DECLARE col_cursor CURSOR FOR SELECT COLUMN_NAME<br /> FROM ' + DB_NAME() + '.INFORMATION_SCHEMA.COLUMNS<br /> WHERE TABLE_SCHEMA = ''' + @SCHEMA + '''<br /> AND TABLE_NAME = ''' + @TABLE + '''<br /> AND DATA_TYPE IN (''char'',''nchar'',''ntext'',''nvarchar'',''text'',''varchar'')' </p> <p> EXEC (@CURSOR) </p> <p> OPEN col_cursor <br /> FETCH NEXT FROM col_cursor INTO @columnName </p> <p> WHILE @@FETCH_STATUS = 0 <br /> BEGIN <br /> IF @WHERE <> ''<br /> SET @WHERE = @WHERE + ' OR' </p> <p> SET @WHERE = @WHERE + ' ' + @columnName + ' LIKE ''' + @stringToFind + ''''<br /> FETCH NEXT FROM col_cursor INTO @columnName <br /> END </p> <p> CLOSE col_cursor <br /> DEALLOCATE col_cursor </p> <p> SET @sqlCommand = @sqlCommand + @where<br /> --PRINT @sqlCommand<br /> EXEC (@sqlCommand) <br /> END TRY<br /> BEGIN CATCH<br /> PRINT 'There was an error'<br /> IF CURSOR_STATUS('variable', 'col_cursor') <> -3<br /> BEGIN<br /> CLOSE col_cursor <br /> DEALLOCATE col_cursor <br /> END<br /> END CATCH </p> <p>
الآن هذا الكو قام بانشاء الدالة sp_FindStringInTable .
و لكي نستخدمها من الممك ان نستخدم هذا الكود:
</p> <p> USE AdventureWorks<br /> GO <br /> EXEC sp_FindStringInTable '%land%', 'Person', 'Contact' </p> <p>
و لاحظ أننا استخدمنا علامة % و من الممكن أن نستخدم * أيضاً لتحديد البحث بشكل أكبر …
أتمنىأن تكون هذه الدالة مفيدة …
نصيحة شخصية: لا تستخدم هذا الأسلوب في البحث إلا في الضرورة القصوى، حاول أن تستخدم بحث محدد في حقول و جداول محددة و ذلك لرفع كفائة الإستعلام Query الذي تكتبه.
إن كنت تريد البحث باللغة العربية استبدل varchar بـ nvarchar.
طلال الحضبي.
المصدر: MSSQLTips.com
الوسوم: Database, SQL Server

