عند إنشاء إجراء مخزن في قاعدة البيانات SQL Server، هناك بعض الأمور التي يجب مراعاتها لتجنب ظهور أخطاء النحو الخاطئ. في الكود الذي قدمته، تواجهك مشكلة نحوية بسيطة تتعلق بالعبارة “Declare” والتي يجب وضعها في الجزء الأعلى من الإجراء المخزن. هذا يعني أنه يجب أن تظهر “Declare” قبل أي عملية استعلام في الإجراء المخزن.
بمعنى آخر، يجب أن يكون الإعلان عن المتغيرات موجودًا في أعلى الإجراء المخزن قبل أي عملية استعلام أو استخدام لهذه المتغيرات. لذلك، يجب تحريك إعلان المتغير @Search إلى أعلى الإجراء المخزن قبل استخدامه في الاستعلام.
هناك بعض النقاط الأخرى التي يمكن تحسينها في الإجراء المخزن الذي قدمته:
-
استخدم “SET NOCOUNT ON” في بداية الإجراء المخزن لتعطيل عرض عدد الصفوف المتأثرة بالعملية، وهذا يزيد من أداء الإجراء المخزن.
-
يمكنك استخدام دالة RTRIM() مع الأعمدة التي تحتوي على نصوص، مثل client_Name و client_Surname، لإزالة أي مسافات فارغة من نهاية النص قبل مقارنتها باستخدام LIKE.
-
تحقق من أن متغير البحث @Search تم تعيينه بقيمة قبل استخدامه في الاستعلام. يمكنك تمرير قيمة له أو تعيينها داخل الإجراء المخزن.
لنقم بتعديل الإجراء المخزن بناءً على هذه النقاط:
sqlUSE [The_Cloud]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_cloud_ClientAllSearch]
@Search NVARCHAR(30)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SearchTerm NVARCHAR(30);
SET @SearchTerm = '%' + @Search + '%';
SELECT client_Name, client_Surname, client_CompanyName, clientContact_TelephoneNo, clientContact_MobileNo, clientAddress_PostalCode
FROM cloud_Client
INNER JOIN dbo.cloud_ClientAddresses ON cloud_Client.client_ID = cloud_ClientAddresses.client_ID
LEFT JOIN cloud_ClientContact ON cloud_Client.client_ID = cloud_ClientContact.client_ID
WHERE cloud_Client.client_Name LIKE @SearchTerm OR
cloud_Client.client_Surname LIKE @SearchTerm OR
RTRIM(cloud_ClientContact.clientContact_MobileNo) LIKE @SearchTerm OR
cloud_ClientAddresses.clientAddress_PostalCode LIKE @SearchTerm;
END
باستخدام هذا الإجراء المخزن المعدل، يجب أن تتجنب ظهور أخطاء النحو ويمكنك البدء في استخدامه للبحث عن العملاء بناءً على مختلف المعايير المحددة.
المزيد من المعلومات
بالطبع، ها هو المقال المكتمل:
إصلاح الخطأ: إنشاء إجراء مخزن بالطريقة الصحيحة
عندما يتعلق الأمر بإنشاء إجراء مخزن في قاعدة البيانات SQL Server، يجب عليك أن تكون حذرًا لضمان تنفيذ الكود بشكل صحيح وخالٍ من الأخطاء النحوية. واجه أحد المستخدمين مشكلة مع الكود الذي كتبه، حيث كان يتلقى رسالة خطأ تفيد بوجود خطأ نحوي بالقرب من الكلمة الرئيسية “Declare”.
تفحص الكود المقدم، ووجد أن السبب في هذه المشكلة يعود إلى وضع عبارة “Declare” داخل الجزء الخاطئ من الإجراء المخزن. حيث يجب أن تكون عبارة “Declare” قبل أي استعلامات في الإجراء المخزن.
بالإضافة إلى ذلك، هناك بعض النقاط التي يمكن تحسينها في الكود المقدم، مثل استخدام “SET NOCOUNT ON” لتعطيل عرض عدد الصفوف المتأثرة بالعملية واستخدام دالة RTRIM() لإزالة المسافات الفارغة من نهاية النصوص.
تم تعديل الإجراء المخزن ليتماشى مع هذه التوجيهات وليساعد في تجنب الأخطاء النحوية المزعجة. إليك الإجراء المخزن المعدل:
sqlUSE [The_Cloud]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_cloud_ClientAllSearch]
@Search NVARCHAR(30)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SearchTerm NVARCHAR(30);
SET @SearchTerm = '%' + @Search + '%';
SELECT client_Name, client_Surname, client_CompanyName, clientContact_TelephoneNo, clientContact_MobileNo, clientAddress_PostalCode
FROM cloud_Client
INNER JOIN dbo.cloud_ClientAddresses ON cloud_Client.client_ID = cloud_ClientAddresses.client_ID
LEFT JOIN cloud_ClientContact ON cloud_Client.client_ID = cloud_ClientContact.client_ID
WHERE cloud_Client.client_Name LIKE @SearchTerm OR
cloud_Client.client_Surname LIKE @SearchTerm OR
RTRIM(cloud_ClientContact.clientContact_MobileNo) LIKE @SearchTerm OR
cloud_ClientAddresses.clientAddress_PostalCode LIKE @SearchTerm;
END
باستخدام هذا الإجراء المخزن، يمكن الآن تجنب ظهور الأخطاء النحوية والبدء في استخدام الإجراء بنجاح للبحث عن العملاء في قاعدة البيانات بناءً على مختلف المعايير المحددة.
هذه الخطوات البسيطة تؤكد أهمية فحص وتحسين الكود قبل تنفيذه، حيث يمكن أن توفر لك الكثير من الوقت والجهد في تجنب المشاكل النحوية وتحسين أداء قاعدة البيانات الخاصة بك.