SQL-सर्वर के लिए एक चर में गतिशील SQL का परिणाम प्राप्त करना


116

संग्रहीत कार्यविधि में निम्नानुसार गतिशील SQL निष्पादित करना:

DECLARE @sqlCommand nvarchar(1000)
DECLARE @city varchar(75)
SET @city = 'London'
SET @sqlCommand = 'SELECT COUNT(*) FROM customers WHERE City = @city'
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75)', @city = @city

मैं एसपी में रिटर्न मान के रूप में गणना (*) कॉलम मान का उपयोग कैसे करूं?

जवाबों:


202
DECLARE @sqlCommand nvarchar(1000)
DECLARE @city varchar(75)
declare @counts int
SET @city = 'New York'
SET @sqlCommand = 'SELECT @cnt=COUNT(*) FROM customers WHERE City = @city'
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75),@cnt int OUTPUT', @city = @city, @cnt=@counts OUTPUT
select @counts as Counts

4
+1: आपने मुझे इसके लिए हराया, एक चर घोषित करने की आवश्यकता है, और इसे एक OUTPUT के रूप में चिह्नित करें। अधिक जानकारी के लिए, और SQL सर्वर डायनेमिक SQL के लिए एक अनुशंसित रीडिंग देखें, डायनेमिक SQL का शाप और आशीर्वाद देखें
OMG Ponies

1
धन्यवाद। N '@ शहर nvarchar (75), @ cnt int OUTPUT' में OUTPUT कीवर्ड वह था जो मैं गायब था।
17:42 पर पीटर लिंडहोम

1
वहाँ कोई समाधान नहीं है कि गतिशील बयान में एक आउटपुट चर जोड़ने की आवश्यकता नहीं है ???
टैब अल्लेमन

2

आपने शायद यह कोशिश की है, लेकिन क्या आपके विनिर्देश ऐसे हैं कि आप ऐसा कर सकते हैं?

DECLARE @city varchar(75)
DECLARE @count INT
SET @city = 'London'
SELECT @count = COUNT(*) FROM customers WHERE City = @city

2

गतिशील संस्करण

    ALTER PROCEDURE [dbo].[ReseedTableIdentityCol](@p_table varchar(max))-- RETURNS int
    AS
    BEGIN
        -- Declare the return variable here
       DECLARE @sqlCommand nvarchar(1000)
       DECLARE @maxVal INT
       set @sqlCommand = 'SELECT @maxVal = ISNULL(max(ID),0)+1 from '+@p_table
       EXECUTE sp_executesql @sqlCommand, N'@maxVal int OUTPUT',@maxVal=@maxVal OUTPUT
       DBCC CHECKIDENT(@p_table, RESEED, @maxVal)
    END


exec dbo.ReseedTableIdentityCol @p_table='Junk'

0
DECLARE @sqlCommand nvarchar(1000)
DECLARE @city varchar(75)
DECLARE @cnt int
SET @city = 'London'
SET @sqlCommand = 'SELECT @cnt=COUNT(*) FROM customers WHERE City = @city'
EXECUTE sp_executesql @sqlCommand, N'@city nvarchar(75)', @city = @city
RETURN @cnt

1
मुझे लगता है कि आपका जवाब कट गया।
ऋषि

Msg 137, Must declare the scalar variable "@cnt". Msg 178 A RETURN statement with a return value cannot be used in this context.,। काम का एक अच्छा टुकड़ा, भाई))
it3xl

0

यह एक समाधान हो सकता है?

declare @step2cmd nvarchar(200)
DECLARE @rcount NUMERIC(18,0)   
set @step2cmd = 'select count(*) from uat.ap.ztscm_protocollo' --+ @nometab
EXECUTE @rcount=sp_executesql @step2cmd
select @rcount

-2
 vMYQUERY := 'SELECT COUNT(*) FROM ALL_OBJECTS WHERE OWNER = UPPER(''MFI_IDBI2LIVE'') AND OBJECT_TYPE = ''TABLE'' 
    AND OBJECT_NAME  =''' || vTBL_CLIENT_MASTER || '''';
    PRINT_STRING(VMYQUERY);
    EXECUTE IMMEDIATE  vMYQUERY INTO VCOUNTTEMP ;

यह sql सर्वर के लिए लागू नहीं होता है।
रॉबर्ट लूजो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.