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

SQL सर्वर में फ़ंक्शन बनाएं और निष्पादित करें

मैं इसके साथ जाऊंगा:

ALTER FUNCTION SearchProjects (
    @location NVARCHAR(50),
    @purpose NVARCHAR(50),
    @type NVARCHAR(50))
RETURNS TABLE
AS
RETURN
(
    SELECT  p.ProjectName, 
            p.Areas, 
            p.PaymentSystem, 
            p.ReceivedDate,    
            p.PropertyClassification, 
            p.ProjectImage,
            l.LocationName,
            pur.PurposeName,
            t.TypeName
    FROM dbo.Projects AS p 
    LEFT JOIN dbo.Locations AS l ON p.LocationID = l.ID      
    LEFT JOIN dbo.Purposes pur ON p.PurposeID = pur.ID 
    LEFT JOIN dbo.[Types] AS t ON p.TypeID = t.ID
    WHERE UPPER(ISNULL(l.LocationName,N'')) LIKE N'%' + UPPER(@location) + '%'
    AND UPPER(ISNULL(pur.PurposeName,N'')) LIKE N'%' + UPPER(@purpose) + '%'
    AND UPPER(ISNULL(t.TypeName,N'')) LIKE N'%' + UPPER(@type) + '%'
     )
GO

यदि आप केवल उन्हीं प्रोजेक्ट्स को वापस करना चाहते हैं जहां सभी मानदंडों को पूरा किया जाता है और इनपुट पैरामीटर में एक खाली स्ट्रिंग को वाइल्डकार्ड के रूप में माना जाता है:

SELECT * FROM dbo.SearchProjects('','',''); -- Returns all records

SELECT * FROM dbo.SearchProjects('north','',''); -- Returns all records with LocationName containing 'north'
SELECT * FROM dbo.SearchProjects('','research',''); -- Returns all records with PurposeName containing 'research'
SELECT * FROM dbo.SearchProjects('','','closed'); -- Returns all records with TypeName containing 'closed'

SELECT * FROM dbo.SearchProjects('north','research',''); -- Returns all records with LocationName containing 'north' and PurposeName containing 'research'

यह आपकी तालिकाओं में फ़ील्ड मानों के लिए इनपुट पैरामीटर मानों की तुलना करते समय किसी भी केस-संवेदनशीलता को भी हटा देता है। मैं अब भी LEFT JOIN का उपयोग करूंगा INNER JOIN . के बजाय बस अगर कुछ प्रोजेक्ट रिकॉर्ड में गलत स्थान आईडी, प्रयोजन आईडी या टाइप आईडी मान हो सकते हैं।

अगर आप ऐसे प्रोजेक्ट वापस करना चाहते हैं जहां कोई इनपुट पैरामीटर से मानदंड पूरे किए जाते हैं (और जब कम से कम एक इनपुट पैरामीटर में कोई मान होता है तो खाली इनपुट पैरामीटर को वाइल्डकार्ड के रूप में न मानें), आप AND को बदल सकते हैं में WHERE OR . का खंड s और पास करें NULL किसी भी इनपुट पैरामीटर के लिए आप इसके लिए कोई मान निर्दिष्ट नहीं करना चाहते:

ALTER FUNCTION SearchProjects (
    @location NVARCHAR(50),
    @purpose NVARCHAR(50),
    @type NVARCHAR(50))
RETURNS TABLE
AS
RETURN
(
    SELECT  p.ProjectName, 
            p.Areas, 
            p.PaymentSystem, 
            p.ReceivedDate,    
            p.PropertyClassification, 
            p.ProjectImage,
            l.LocationName,
            pur.PurposeName,
            t.TypeName
    FROM dbo.Projects AS p 
    LEFT JOIN dbo.Locations AS l ON p.LocationID = l.ID      
    LEFT JOIN dbo.Purposes pur ON p.PurposeID = pur.ID 
    LEFT JOIN dbo.[Types] AS t ON p.TypeID = t.ID
    WHERE UPPER(ISNULL(l.LocationName,N'')) LIKE N'%' + UPPER(@location) + '%'
    OR UPPER(ISNULL(pur.PurposeName,N'')) LIKE N'%' + UPPER(@purpose) + '%'
    OR UPPER(ISNULL(t.TypeName,N'')) LIKE N'%' + UPPER(@type) + '%'
     )
GO


SELECT * FROM dbo.SearchProjects('','',''); -- Returns all records

SELECT * FROM dbo.SearchProjects('north',NULL,NULL); -- Returns all records with LocationName containing 'north'
SELECT * FROM dbo.SearchProjects(NULL,'research',NULL); -- Returns all records with PurposeName containing 'research'
SELECT * FROM dbo.SearchProjects(NULL,NULL,'closed'); -- Returns all records with TypeName containing 'closed'

SELECT * FROM dbo.SearchProjects('north','research',NULL); -- Returns all records with LocationName containing 'north' or PurposeName containing 'research'

NULL यहां अवांछित इनपुट पैरामीटर आवश्यक हैं क्योंकि किसी भी इनपुट पैरामीटर में एक खाली स्ट्रिंग के साथ फ़ंक्शन को कॉल करने से सभी रिकॉर्ड वापस आ जाएंगे:

SELECT * FROM dbo.SearchProjects('north','','');
SELECT * FROM dbo.SearchProjects('north','research','');
SELECT * FROM dbo.SearchProjects('north','','closed');


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डुप्लिकेट रिकॉर्ड हटाना

  2. मर्ज स्टेटमेंट में वेरिएबल सेट करने के लिए आउटपुट का उपयोग करना

  3. INFORMATION_SCHEMA का उपयोग करके मैं डिफ़ॉल्ट बाधा कैसे ढूंढूं?

  4. SQL सर्वर में एक कॉलम को दो कॉलम में कैसे विभाजित करें

  5. एक्लिप्स इंडिगो में हाइबरनेट टूल्स के साथ रिवर्स इंजीनियरिंग