Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

कीवर्ड से मेल खाने के लिए SQL क्वेरी?

हाँ, पूर्ण पाठ खोज के साथ संभव है, और संभवतः सबसे अच्छा उत्तर है। सीधे टी-एसक्यूएल समाधान के लिए, आप एक स्प्लिट फ़ंक्शन का उपयोग कर सकते हैं और शामिल हो सकते हैं, उदा। dbo.Numbers नामक संख्याओं की एक तालिका मानते हुए (आपको एक अलग ऊपरी सीमा तय करने की आवश्यकता हो सकती है):

SET NOCOUNT ON;
DECLARE @UpperLimit INT;
SET @UpperLimit = 200000;

WITH n AS
(
    SELECT
        rn = ROW_NUMBER() OVER
        (ORDER BY s1.[object_id])
    FROM sys.objects AS s1
    CROSS JOIN sys.objects AS s2
    CROSS JOIN sys.objects AS s3
)
SELECT [Number] = rn - 1
INTO dbo.Numbers
FROM n
WHERE rn <= @UpperLimit + 1;

CREATE UNIQUE CLUSTERED INDEX n ON dbo.Numbers([Number]);

और एक बंटवारा फ़ंक्शन जो संख्याओं की उस तालिका का उपयोग करता है:

CREATE FUNCTION dbo.SplitStrings
(
    @List NVARCHAR(MAX)
)
RETURNS TABLE
AS
    RETURN
    (
        SELECT DISTINCT
            [Value] = LTRIM(RTRIM(
                SUBSTRING(@List, [Number],
                CHARINDEX(N',', @List + N',', [Number]) - [Number])))
        FROM
            dbo.Numbers
        WHERE
            Number <= LEN(@List)
            AND SUBSTRING(N',' + @List, [Number], 1) = N','
    );
GO

तब आप बस इतना ही कह सकते हैं:

SELECT key, NvarcharColumn /*, other cols */
FROM dbo.table AS outerT
WHERE EXISTS
(
  SELECT 1 
    FROM dbo.table AS t 
    INNER JOIN dbo.SplitStrings(N'list,of,words') AS s
    ON t.NvarcharColumn LIKE '%' + s.Item + '%'
    WHERE t.key = outerT.key
);

एक प्रक्रिया के रूप में:

CREATE PROCEDURE dbo.Search
    @List NVARCHAR(MAX)
AS
BEGIN
    SET NOCOUNT ON;

    SELECT key, NvarcharColumn /*, other cols */
    FROM dbo.table AS outerT
    WHERE EXISTS
    (
      SELECT 1 
        FROM dbo.table AS t 
        INNER JOIN dbo.SplitStrings(@List) AS s
        ON t.NvarcharColumn LIKE '%' + s.Item + '%'
        WHERE t.key = outerT.key
    );
END
GO

तब आप बस @List . में पास कर सकते हैं (उदा. EXEC dbo.Search @List = N'foo,bar,splunge' ) सी# से।

यह बहुत तेज़ नहीं होगा, लेकिन मुझे यकीन है कि यह सभी डेटा को C# में खींचने और इसे मैन्युअल रूप से डबल-नेस्टेड लूप करने की तुलना में तेज़ होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर:किसी क्वेरी के साथ कॉलम का डिफ़ॉल्ट मान ज्ञात करें

  2. सी # में SQL सर्वर संग्रहीत प्रक्रिया आउटपुट पैरामीटर तक पहुंचना

  3. SQL सर्वर में 'पिवट' का उपयोग करके पंक्तियों को कॉलम में बदलें

  4. एसक्यूएल। एसपी या समारोह शुक्रवार की अगली तारीख की गणना करें

  5. बड़ी तालिकाओं पर SQL सर्वर क्वेरी प्रदर्शन में सुधार करें