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

tsql किसी फ़ंक्शन या स्टोर प्रक्रिया से तालिका लौटा रहा है

आप SQL फ़ंक्शन के भीतर से अस्थायी तालिकाओं तक नहीं पहुँच सकते। आपको अनिवार्य रूप से तालिका चर का उपयोग करने की आवश्यकता होगी:

ALTER FUNCTION FnGetCompanyIdWithCategories()
RETURNS  @rtnTable TABLE 
(
    -- columns returned by the function
    ID UNIQUEIDENTIFIER NOT NULL,
    Name nvarchar(255) NOT NULL
)
AS
BEGIN
DECLARE @TempTable table (id uniqueidentifier, name nvarchar(255)....)

insert into @myTable 
select from your stuff

--This select returns data
insert into @rtnTable
SELECT ID, name FROM @mytable 
return
END

संपादित करें

इस प्रश्न पर टिप्पणियों के आधार पर यहाँ मेरी सिफारिश है। आप किसी अन्य क्वेरी में किसी प्रक्रिया या तालिका-मूल्यवान फ़ंक्शन के परिणामों में शामिल होना चाहते हैं। मैं आपको दिखाऊंगा कि आप इसे कैसे कर सकते हैं फिर आप जिसे पसंद करते हैं उसे चुनें। मैं अपने एक स्कीमा से नमूना कोड का उपयोग करने जा रहा हूं, लेकिन आपको इसे अनुकूलित करने में सक्षम होना चाहिए। दोनों पहले संग्रहीत प्रक्रिया के साथ व्यवहार्य समाधान हैं।

declare @table as table (id int, name nvarchar(50),templateid int,account nvarchar(50))

insert into @table
execute industry_getall

select * 
from @table 
inner join [user] 
    on account=[user].loginname

इस मामले में, आपको प्रक्रिया के परिणामों को संग्रहीत करने के लिए एक अस्थायी तालिका या तालिका चर घोषित करना होगा। अब आइए देखें कि यदि आप UDF का उपयोग कर रहे होते तो आप यह कैसे करते

select *
from fn_Industry_GetAll()
inner join [user] 
    on account=[user].loginname

जैसा कि आप देख सकते हैं कि यूडीएफ पढ़ने में बहुत अधिक संक्षिप्त है, और शायद थोड़ा बेहतर प्रदर्शन करता है क्योंकि आप द्वितीयक अस्थायी तालिका का उपयोग नहीं कर रहे हैं (प्रदर्शन मेरी ओर से एक पूर्ण अनुमान है)।

यदि आप कई अन्य स्थानों पर अपने कार्य/प्रक्रिया का पुन:उपयोग करने जा रहे हैं, तो मुझे लगता है कि यूडीएफ आपकी सबसे अच्छी पसंद है। एकमात्र पकड़ यह है कि आपको #Temp तालिकाओं का उपयोग बंद करना होगा और तालिका चर का उपयोग करना होगा। जब तक आप अपनी अस्थायी तालिका को अनुक्रमित नहीं कर रहे हैं, तब तक कोई समस्या नहीं होनी चाहिए, और आप tempDb कम का उपयोग करेंगे क्योंकि तालिका चर स्मृति में रखे जाते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATETIMEOFFSETFROMPARTS() SQL सर्वर में उदाहरण (T-SQL)

  2. SQL सर्वर (T-SQL) में क्वेरी परिणाम ईमेल करते समय सेपरेटर को अल्पविराम में बदलें

  3. एंटिटी फ्रेमवर्क का उपयोग करके, मैं पढ़ने पर तालिका को कैसे लॉक कर सकता हूं?

  4. लेन-देनस्कोप अपवाद फेंक रहा है, यह प्लेटफॉर्म कनेक्शन ऑब्जेक्ट खोलते समय वितरित लेनदेन का समर्थन नहीं करता है

  5. SQL सर्वर में SUM () फ़ंक्शन