क्वेरी डेटा संपर्क रखने वाली एक तालिका की चिंता करती है। प्रत्येक संपर्क के लिए "स्थिति" वापस करने के लिए एक टेबल वैल्यू फ़ंक्शन का उपयोग किया जाता है।
सम्मिलित विवरण से अद्वितीय कुंजी प्राप्त होती हैसंपर्क तालिका और इसे @filteredIdList नामक एक चर में लोड करता है। यह तब संपर्क तालिका में शामिल हो जाता है और फिर चर-मूल्यवान फ़ंक्शन में चर @filteredIdList को पास करके।
मैंने यह दिखाने के लिए उदाहरण को सरल बना दिया है कि वर्तमान में मैं कैसे स्थिति वापस कर रहा हूँ। इसके बजाय इसे एक दृश्य में बदलने की आवश्यकता है:
DECLARE @filteredIdList IdList;
INSERT INTO @filteredIdList SELECT ContactID FROM Contacts
SELECT
Contacts.ContactID,
Contact_Status
FROM Contacts
INNER JOIN @filteredIdList [IDLIST] ON Contacts.ContactID = [IDLIST].[id]
INNER JOIN tvfContact_Status(@filteredIdList) Contact_Status
ON [IDLIST].[id] = Contact_Status.ContactID
मैंने इसे देखने के अंदर एक सीटीई के रूप में बनाने की कोशिश की है, लेकिन इसे समझ नहीं पाया।
उत्तर:
जवाब के लिए 0 № 1मेरा मानना है कि जिस सीटीई की आप तलाश कर रहे हैं वह होगा।
;with nameofcte (IdList) as (
select ContactID from Contacts
)
तो आप बस अपने ज्वाइन स्टेटमेंट में nameofcte का उपयोग करेंगे
मैं सीटीई का हर रोज उपयोग नहीं करता हूं, इसलिए मैं सामान्य रूप से इस पोस्ट को सरल टॉक पर पढ़ता हूं ताकि उपयोग करने से पहले उन पर खुद को ताज़ा कर सकें। https://www.simple-talk.com/sql/t-sql-programming/sql-server-cte-basics/
जवाब के लिए 0 № 2
निश्चित नहीं है कि आपको यहां एक दृश्य की आवश्यकता क्यों है, लेकिन यदि आप ऐसा करना चाहते हैं तो नीचे दिए गए तरीके से प्रयास करें
के बाद से tvfContact_Status
प्रत्येक संपर्क की स्थिति वापस करने के लिए उपयोग किया जाता है। बदलाव Table valued function
सेवा मेरे Scalar function
.
पहले बदलो tvfContact_Status
समारोह
ALTER FUNCTION dbo.tvfContact_Status(@ContactID int)
RETURNS varchar(50) --Status
AS
BEGIN
--------
RETURN @Status;
END;
GO
बनाएं एक View
इस तरह
CREATE VIEW Contact_View
AS
SELECT
Contacts.ContactID,
dbo.tvfContact_Status(ContactID) as Contact_Status
FROM Contacts
ध्यान दें: यह ऐसा करने का एक कुशल तरीका नहीं है