স্কেল ভেরিয়েবলে এক্সিকিউট রেজাল্ট কীভাবে অর্পণ করবেন?


108

এসকিউএল-তে কোনও চলককে আপনি এক্সিকিউটিভ কলের ফলাফল কীভাবে অর্পণ করবেন? আমার কাছে একটি সঞ্চিত সংগ্রহ রয়েছে up_GetBusinessDay, যা একক তারিখ দেয়।

আপনি কি এরকম কিছু করতে পারেন:

exec @PreviousBusinessDay = dbo.up_GetBusinessDay @Date, -1

উত্তর:


97

আমি সর্বদা ফিরে ত্রুটি স্থিতির জন্য ফেরতের মানটি ব্যবহার করি। আপনার যদি একটি মান পাস করতে হয় তবে আমি একটি আউটপুট প্যারামিটার ব্যবহার করব।

একটি OUTPUT প্যারামিটার সহ নমুনা সঞ্চিত পদ্ধতি:

CREATE PROCEDURE YourStoredProcedure 
(
    @Param1    int
   ,@Param2    varchar(5)
   ,@Param3    datetime OUTPUT
)
AS
IF ISNULL(@Param1,0)>5
BEGIN
    SET @Param3=GETDATE()
END
ELSE
BEGIN
    SET @Param3='1/1/2010'
END
RETURN 0
GO

একটি OUTPUT প্যারামিটার সহ সঞ্চিত পদ্ধতিতে কল করুন:

DECLARE @OutputParameter  datetime
       ,@ReturnValue      int

EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT
PRINT @ReturnValue
PRINT CONVERT(char(23),@OutputParameter ,121)

আউটপুট:

0
2010-01-01 00:00:00.000

10
একটি OUTPUT প্যারামিটার ব্যবহার করে, আপনি যে কোনও ডেটা টাইপ ফিরিয়ে দিতে পারেন, সঞ্চিত পদ্ধতি থেকে রিটার্ন মানটি কেবলমাত্র পূর্ণসংখ্যা হতে পারে।
কেএম

2
কেবলমাত্র একটি পার্শ্ব নোট, OUTPUT প্যারামিটারগুলি যে কোনও মান দিয়ে ঘোষিত হয় সেগুলি পাস করার দরকার নেই This এর অর্থ হ'ল আপনি যদি কোনও বিদ্যমান এসপি পরিবর্তন করে থাকেন তবে কোনও কিছু ভাঙার ঝুঁকি না নিয়ে নিরাপদে এটি করতে পারেন। উদাহরণস্বরূপ, @ প্যারাম 3 ডেটটাইম = '1900-01-01' OUTPUT।
মরভেল

55

আপনি যদি কোনও পূর্ণসংখ্যকে সহজেই ফিরিয়ে দিতে চান তবে এটি কাজ করবে:

DECLARE @ResultForPos INT 
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos

13
-1 এটি কেবল একটি পূর্ণসংখ্যা ফেরত দেবে। ওপি একটি তারিখ ফিরিয়ে দিতে চায়। @KM দ্বারা গৃহীত উত্তর। এটি সঠিক উত্তর, যেমন এটি রিটার্নের পরিবর্তে OUTPUT ব্যবহার করে।
কোড ম্যাভেরিক

4
আসলে এটি কাজ করে। কোনও পূর্ণসংখ্যা কীভাবে ফিরে পাওয়া যায় সে সম্পর্কে উদাহরণস্বরূপ, আপনি অন্যান্য সমস্ত ধরণের ক্ষেত্রেও একই কাজ করতে পারেন (টেবিল সম্ভব কিনা তা যাচাই করেন নি, তবে আমি হ্যাঁ মনে করি।) আমি কেবল এনভারচারের জন্য চেষ্টা করেছি (50)।
Mzn

2
@ এমজেএন "আপনি অন্য সকল ধরণের জন্য একই কাজ করতে পারেন" , অবশ্যই এতে কাজ করে না UNIQUEIDENTIFIER
জেমস

1
@ জামেস কেন? ইউনিকডেফায়ার ডেটাটাইপ সম্পর্কে আলাদা কী? সঞ্চিত পদ্ধতিগুলি কী অদ্বিতীয় পরিচয় ফেরত দিতে পারে না?
Mzn

3
@Mzn UNIQUEIDENTIFIERশুধু একটি উদাহরণ ছিল, RETURN, পূর্ণসংখ্যা মান কেবল কাজই করার জন্য ডিজাইন করা দেখতে ডক্স । এসপি থেকে অন্য ডেটা পাওয়ার প্রস্তাবিত উপায়টি হয় কোনও ফল সেট বা ব্যবহার করাOUTPUT
জেমস

34
declare @EventId int

CREATE TABLE #EventId (EventId int)

insert into #EventId exec rptInputEventId

set @EventId = (select * from #EventId)

drop table #EventId 


2
এটি একটি তারিখের জন্যও ব্যবহৃত হয়, যখন অন্তর্নিহিত স্প্রোকের কোনও আউটপুট প্যারামিটার না থাকে। (ডায়ামিক এসকিউএল থেকে অন্তর্নিহিত স্প্রোকের আরও একটি এক্সিকিউট ছিল)
জেফ বিগেলি

3
@ মিশেলসান্ডার সম্পূর্ণরূপে ঠিক আছে, অন্য সমস্ত সমাধানগুলি ওপিএস প্রশ্নের সঠিক উত্তর দিচ্ছে না । একমাত্র উপায় হ'ল একটি অস্থায়ী টেবিল যা ফলাফলগুলি ধারণ করে।
এসকিউএল পুলিশ

3
প্রোকটিতে সম্পাদনার প্রয়োজন ছাড়াই এখানে কেবলমাত্র কাজ করে যা আমি আমার ক্ষেত্রে করতে পারি না। +1
DLeh

আপনি কোনও টেম্প টেবিলের জায়গায় টেবিল ভেরিয়েবল ব্যবহার করতে পারেন।
ত্রুটি

6

ডকুমেন্টেশন থেকে (ধরে নিই যে আপনি এসকিউএল-সার্ভার ব্যবহার করেছেন):

USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO

সুতরাং হ্যাঁ, এটি সেভাবে কাজ করা উচিত।


8
ওপি-র উদাহরণে তারা কোনও তারিখ ফিরিয়ে দিতে চায়, সঞ্চিত পদ্ধতিগুলি কেবল একটি কলিং পদ্ধতি বা কোনও অ্যাপ্লিকেশনে একটি পূর্ণসংখ্যার মান ফিরিয়ে দিতে পারে।
কেএম

0

আমিও একই প্রশ্ন করেছিলাম. এখানে ভাল উত্তর থাকার সময় আমি একটি টেবিল-মূল্যবান ফাংশন তৈরি করার সিদ্ধান্ত নিয়েছি। একটি সারণী (বা স্কেলার) মূল্যবান ফাংশন সহ আপনাকে আপনার সঞ্চিত প্রকল্পটি পরিবর্তন করতে হবে না। আমি কেবল টেবিলের মূল্যবান ফাংশন থেকে একটি নির্বাচন করেছি। মনে রাখবেন যে প্যারামিটার (মাইপ্যারামিটারটি isচ্ছিক)।

CREATE FUNCTION [dbo].[MyDateFunction] 
(@MyParameter varchar(max))
RETURNS TABLE 
AS
RETURN 
(
    --- Query your table or view or whatever and select the results.
    SELECT DateValue FROM MyTable WHERE ID = @MyParameter;
)

আপনার ভেরিয়েবলকে বরাদ্দ দেওয়ার জন্য আপনি কেবল কিছু করতে পারেন:

Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));

আপনি একটি স্কেলারের মূল্যবান ফাংশনও ব্যবহার করতে পারেন:

CREATE FUNCTION TestDateFunction()  
RETURNS datetime  
BEGIN  
    RETURN (SELECT GetDate());
END

তাহলে আপনি সহজভাবে করতে পারেন

Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.