টি-এসকিউএল সঞ্চিত পদ্ধতির নির্বাচিত মান পান


95

টি-এসকিউএল-তে এটি অনুমোদিত:

DECLARE @SelectedValue int
SELECT @SelectedValue = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1

সুতরাং, একটি নির্বাচন মূল্য নির্বাচন করা এবং এটি একটি ভেরিয়েবলে স্টাফ করা সম্ভব (এটি যদি স্কেলারযুক্ত হয় তবে স্পষ্টতই)।

আমি যদি একটি সঞ্চিত পদ্ধতিতে একই নির্বাচন যুক্তি যুক্ত করি:

CREATE PROCEDURE GetMyInt
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1

আমি কি এই সঞ্চিত পদ্ধতির আউটপুট পেতে পারি এবং এটি একটি ভেরিয়েবলের মধ্যে স্টাফ করতে পারি?

কিছুটা এইরকম:

DECLARE @SelectedValue int
SELECT @SelectedValue = EXEC GetMyInt

(আমি জানি যে উপরের সিনট্যাক্সটি অনুমোদিত নয় কারণ আমি চেষ্টা করেছি!)

উত্তর:


192

আপনি ব্যবহার করতে পারেন এমন তিনটি উপায় রয়েছে: রিটার্ন মান এবং OUTPUT প্যারামিটার এবং ফলাফল সেট

এছাড়াও, আপনি যদি প্যাটার্নটি ব্যবহার করেন তবে দেখুন: SELECT @Variable=column FROM table ...

যদি কোয়েরি থেকে একাধিক সারি ফিরে আসে, তবে আপনার @ পরিবর্তনশীলটিতে ক্যোয়ারী দ্বারা ফিরে আসা সর্বশেষ সারিটির মান থাকবে।


আপনার ক্যোয়ারী অন্ততপক্ষে কীভাবে এটির নাম রেখেছিল তার উপর ভিত্তি করে আপনার ক্যোয়ারী কোনও ইনট ফিল্ড প্রত্যাবর্তন করে ভ্যালু প্রত্যাবর্তন করে। আপনি এই কৌশলটি ব্যবহার করতে পারেন:

CREATE PROCEDURE GetMyInt
( @Param int)
AS
DECLARE @ReturnValue int

SELECT @ReturnValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN @ReturnValue
GO

এবং এখন আপনার পদ্ধতিটি কল করুন:

DECLARE @SelectedValue int
       ,@Param         int
SET @Param=1
EXEC @SelectedValue = GetMyInt @Param
PRINT @SelectedValue

এটি কেবল আইএনটি-র জন্যই কাজ করবে, কারণ রিটার্ন কেবলমাত্র একটি একক মানের মান দিতে পারে এবং নালগুলি শূন্যে রূপান্তরিত হয়।

আউটপুট
প্যারামিটার আপনি একটি আউটপুট প্যারামিটার ব্যবহার করতে পারেন:

CREATE PROCEDURE GetMyInt
( @Param     int
 ,@OutValue  int OUTPUT)
AS
SELECT @OutValue=MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO

এবং এখন আপনার পদ্ধতিটি কল করুন:

DECLARE @SelectedValue int
       ,@Param         int
SET @Param=1
EXEC GetMyInt @Param, @SelectedValue OUTPUT
PRINT @SelectedValue 

আউটপুট প্যারামিটারগুলি কেবল একটি মান ফেরত দিতে পারে তবে যে কোনও ডেটা টাইপ হতে পারে

ফলাফল সেট ফলে জন্য পদ্ধতি মত সেট করুন:

CREATE PROCEDURE GetMyInt
( @Param     int)
AS
SELECT MyIntField FROM MyTable WHERE MyPrimaryKeyField = @Param
RETURN 0
GO

এটি ব্যবহার করুন:

DECLARE @ResultSet table (SelectedValue int)
DECLARE @Param int
SET @Param=1
INSERT INTO @ResultSet (SelectedValue)
    EXEC GetMyInt @Param
SELECT * FROM @ResultSet 

ফলাফল সেটগুলিতে অনেকগুলি সারি এবং যে কোনও ডেটা ধরণের অনেক কলাম থাকতে পারে


5
নোট করুন ফলাফল সেট পদ্ধতির জন্য এই টেবিলটি / সন্নিবেশ ব্যবহারের প্রয়োজন, এমনকি যদি কেবলমাত্র একটি রেকর্ড ফিরে আসে। আমি সরাসরি একটি ভেরিয়েবলের শর্টকাট খুঁজছিলাম, কিন্তু এটির একটি নেই।
গোডেয়

একাধিক সারির ফলস্বরূপ 'রিটার্ন মান' এবং 'আউটপুট প্যারামিটার' পদ্ধতির ব্যবহার করা কি সম্ভব?
জি-রুহ

@ জি-রুহ, একটি সঞ্চিত পদ্ধতি একটি, কিছু নয়, কিছু বা সমস্ত ব্যবহার করতে পারে: ফলাফল সেট, রিটার্ন আউটপুট প্যারামিটার এবং / অথবা রিটার্ন মান
কেএম।

4

একটি সংমিশ্রণও রয়েছে, আপনি একটি রেকর্ডসেট সহ একটি রিটার্ন মান ব্যবহার করতে পারেন:

--সংরক্ষিত নীতিমালা--

CREATE PROCEDURE [TestProc]

AS
BEGIN

    DECLARE @Temp TABLE
    (
        [Name] VARCHAR(50)
    )

    INSERT INTO @Temp VALUES ('Mark') 
    INSERT INTO @Temp VALUES ('John') 
    INSERT INTO @Temp VALUES ('Jane') 
    INSERT INTO @Temp VALUES ('Mary') 

    -- Get recordset
    SELECT * FROM @Temp

    DECLARE @ReturnValue INT
    SELECT @ReturnValue = COUNT([Name]) FROM @Temp

    -- Return count
    RETURN @ReturnValue

END

- কলিং কোড--

DECLARE @SelectedValue int
EXEC @SelectedValue = [TestProc] 

SELECT @SelectedValue

- ফলাফল--

এখানে চিত্র বর্ণনা লিখুন


আমি পিএইচপি এই ফলাফল পেতে পারি?
হাগাহুড

3

আপনাকে রিটার্ন মানগুলি ব্যবহার করতে হবে।

DECLARE @SelectedValue int

CREATE PROCEDURE GetMyInt (@MyIntField int OUTPUT)
AS
SELECT @MyIntField = MyIntField FROM MyTable WHERE MyPrimaryKeyField = 1

তারপরে আপনি এটিকে এভাবে ডাকবেন:

EXEC GetMyInt OUTPUT @SelectedValue

2

এটি করার চেষ্টা করুন:

EXEC @SelectedValue = GetMyInt

7
এটি ভুল। একটি নির্বাচনী বিবৃতি SPROC এর মধ্যে নির্দিষ্ট না করা পর্যন্ত SPROC এর রিটার্ন মান হয় না।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.