سيكلسرفير إجراء مخزن
-
03-07-2019 - |
سؤال
وأود أن أسمع إذا كان أي من لديك فكرة القيام بما يلي: لدي طاولة واحدة تحتوي على بعض cardefinitions [معرف] [الشركة] [وضع]، وهذا يمكن على سبيل المثال تكون أودي 100، فورد مستان الخ وبعد ذلك يكون حقل آخر وهو سلسلة تحتوي على كل من السيارة والنموذج، وهذا يمكن أن يكون "فورد موستانج 2.5T"، وبعد ذلك تحتاج إلى العثور على ID الصحيح من cardefinition. أنا على الرغم من القيام
@CarDefintion = "Ford Mustang 2.5T"
Select top 1 CarDefinitionId
from dbo.CarModelDefinition
where CONTAINS(Model,@Cardefinition)
AND Contains(Company, @Cardefinition)
ولكن منذ نموذج + الشركة ليست فريدة من نوعها أحصل على هذا الخطأ: "لا يمكن استخدام CONTAINS أو FREETEXT المسند على طاولة أو فهرستها عرض" dbo.CarModelDefinition 'لأنه ليس النص الكامل المفهرسة " م > هل لديها فكرة عن كيف يمكن حل هذا؟
المحلول
والبحث في سلسلة مع الأعمدة بأحرف البدل القيم باستخدام LIKE
.
@CarDefintion = "Ford Mustang 2.5T"
Select top 1 CarDefinitionId
from dbo.CarModelDefinition
where @Cardefinition like '%' + model + '%'
AND @Cardefinition like '%' + company + '%';
و+
هي المشغل سلسلة السلسال.
نصائح أخرى
@CarDefintion = "Ford Mustang 2.5T"
Select top 1 CarDefinitionId
from dbo.CarModelDefinition
where @Cardefinition LIKE Model OR @Cardefinition LIKE Company
ويجبCarDefintion تكون سلسلة؟ هل من الممكن أن تجعل من مجموعة من نموذج والشركة التي كنت قد ثم الرجوع في SQL الخاصة بك؟
وإذا تعذر ذلك يمكنك أن تكون متأكدا تماما من أن هناك من لا وضعت للتو "موستانج 2.5T" بدلا من "فورد موستانج 2.5T"؟ إذا كنت يمكن أن يكون متأكدا تماما ثم واحد طريقة للقيام بذلك هي لتقسيم بمسافات ثم القيام بسلسلة من عمليات البحث على كل قطعة في محاولة لتحديد موقعه.
DECLARE @CarDefintion VARCHAR(25)
SET @CarDefintion = 'Ford Mustang 2.5T'
DECLARE @Make VARCHAR(25)
DECLARE @Model VARCHAR(25)
SELECT @Make = SUBSTRING(@CarDefintion,0,CHARINDEX(' ',REVERSE(@CarDefintion)))
SELECT @Model = LTRIM( REPLACE(@CarDefintion,@Make,''))
--SELECT @Make,@Model
SELECT TOP 1 *
FROM dbo.CarModelDefinition
WHERE Model = @Model
AND Company = @Make
ويحتوي على () وظائف هي للبحث في النصوص، والتي من المرجح أن لا تستخدم (وبالتالي الأخطاء)