sql server - एक दृश्य में संग्रहित प्रक्रिया को कैसे कॉल करें?



sql-server tsql (4)

आपको नीचे की तरह दृश्य को स्क्रिप्ट करना होगा। आप अनिवार्य रूप से अपनी proc के परिणामों को तालिका var या temp तालिका में लिखेंगे, फिर दृश्य में चयन करें।

संपादित करें - यदि आप अपनी संग्रहीत प्रक्रिया को तालिका मान फ़ंक्शन में बदल सकते हैं, तो यह एक अस्थायी तालिका में चयन करने के चरण को समाप्त कर देगा।

** 2 संपादित करें ** - टिप्पणियां सही हैं कि एक स्पोक को एक दृश्य में पढ़ा नहीं जा सकता जैसा मैंने सुझाया था। इसके बजाय, अपनी पोस्ट को अन्य पोस्ट में उल्लिखित तालिका-मूल्य फ़ंक्शन में कनवर्ट करें और उस से चुनें:

create view sampleView
as select field1, field2, ... 
from dbo.MyTableValueFunction

भ्रम के लिए मुझे माफ करना

मैं एक संग्रहीत प्रक्रिया को कैसे कॉल करूंगा जो दृश्य में डेटा लौटाता है? क्या यह भी संभव है?


Answer #1

एसक्यूएल सर्वर में इस निर्माण की अनुमति नहीं है। एक इनलाइन टेबल-मूल्यवान फ़ंक्शन पैरामीटरयुक्त दृश्य के रूप में कार्य कर सकता है, लेकिन अभी भी इस तरह एक एसपी को कॉल करने की अनुमति नहीं है।

यहां एक एसपी और एक इनलाइन टीवीएफ का एक दूसरे का उपयोग करने के कुछ उदाहरण दिए गए हैं - आप देखेंगे कि टीवीएफ अधिक लचीला है (यह मूल रूप से फ़ंक्शन की तुलना में अधिक दृश्य जैसा है), इसलिए जहां एक इनलाइन टीवीएफ का उपयोग किया जा सकता है, वे अधिक पुनः- eusable:

CREATE TABLE dbo.so916784 (
    num int
)
GO

INSERT INTO dbo.so916784 VALUES (0)
INSERT INTO dbo.so916784 VALUES (1)
INSERT INTO dbo.so916784 VALUES (2)
INSERT INTO dbo.so916784 VALUES (3)
INSERT INTO dbo.so916784 VALUES (4)
INSERT INTO dbo.so916784 VALUES (5)
INSERT INTO dbo.so916784 VALUES (6)
INSERT INTO dbo.so916784 VALUES (7)
INSERT INTO dbo.so916784 VALUES (8)
INSERT INTO dbo.so916784 VALUES (9)
GO

CREATE PROCEDURE dbo.usp_so916784 @mod AS int
AS 
BEGIN
    SELECT  *
    FROM    dbo.so916784
    WHERE   num % @mod = 0
END
GO

CREATE FUNCTION dbo.tvf_so916784 (@mod AS int)
RETURNS TABLE
    AS
RETURN
    (
     SELECT *
     FROM   dbo.so916784
     WHERE  num % @mod = 0
    )
GO    

EXEC dbo.usp_so916784 3
EXEC dbo.usp_so916784 4

SELECT * FROM dbo.tvf_so916784(3)    
SELECT * FROM dbo.tvf_so916784(4)

DROP FUNCTION dbo.tvf_so916784
DROP PROCEDURE dbo.usp_so916784
DROP TABLE dbo.so916784

Answer #2

यदि आप एसक्यूएल सर्वर 2005 का उपयोग कर रहे हैं तो आप तालिका मूल्यवान कार्यों का उपयोग कर सकते हैं। आप इन्हें सीधे कॉल कर सकते हैं और पैरामीटर पास कर सकते हैं, जबकि उनका इलाज करते हुए वे टेबल थे।

अधिक जानकारी के लिए तालिका-मूल्यवान उपयोगकर्ता-परिभाषित कार्य देखें


Answer #3
create view sampleView as 
select field1, field2, ... 
from dbo.MyTableValueFunction

ध्यान दें कि भले ही आपका MyTableValueFunction किसी भी पैरामीटर को स्वीकार नहीं करता है, फिर भी आपको उसके बाद कोष्ठक शामिल करने की आवश्यकता है, यानी:

... from dbo.MyTableValueFunction()

कोष्ठक के बिना, आपको एक "अमान्य ऑब्जेक्ट नाम" त्रुटि मिलेगी।





database-design