উত্তর:
আপনার যদি OUTPUT প্যারামিটার থাকে তবে আপনি করতে পারেন
DECLARE @retval int
DECLARE @sSQL nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @tablename nvarchar(50)
SELECT @tablename = N'products'
SELECT @sSQL = N'SELECT @retvalOUT = MAX(ID) FROM ' + @tablename;
SET @ParmDefinition = N'@retvalOUT int OUTPUT';
EXEC sp_executesql @sSQL, @ParmDefinition, @retvalOUT=@retval OUTPUT;
SELECT @retval;
তবে আপনি যদি না করেন এবং এসপি সংশোধন করতে না পারেন:
-- Assuming that your SP return 1 value
create table #temptable (ID int null)
insert into #temptable exec mysp 'Value1', 'Value2'
select * from #temptable
সুন্দর নয়, তবে কাজ করে।
@retvalOUT=@retval OUTPUT
? তৃতীয় প্যারামিটারটি sp_executesql
কি ন্যায়সঙ্গত হওয়া উচিত নয় @retval OUTPUT
?
EXEC sp_executesql @sSQL, @ParmDefinition, @retval OUTPUT;
DECLARE @tab AS TABLE (col1 VARCHAR(10), col2 varchar(10))
INSERT into @tab EXECUTE sp_executesql N'
SELECT 1 AS col1, 2 AS col2
UNION ALL
SELECT 1 AS col1, 2 AS col2
UNION ALL
SELECT 1 AS col1, 2 AS col2'
SELECT * FROM @tab
insert into @tab
। যদি আপনি insert into @tab
একাধিক রান করার চেষ্টা করেন এবং execute sp_executesql
বিভিন্ন স্ক্যুএল দিয়ে, select * from @tab
কেবল প্রথম
DECLARE @vi INT
DECLARE @vQuery NVARCHAR(1000)
SET @vQuery = N'SELECT @vi= COUNT(*) FROM <TableName>'
EXEC SP_EXECUTESQL
@Query = @vQuery
, @Params = N'@vi INT OUTPUT'
, @vi = @vi OUTPUT
SELECT @vi
@ পরিবর্তনশীল ইন্ট ঘোষণা করুন
এক্সিকিউটিভ @ পরিবর্তনশীল = প্রোম_নাম
রিটার্ন মানগুলি সাধারণত কোনও ফলাফল "প্রত্যাবর্তন" করতে ব্যবহৃত হয় না তবে সাফল্য (0) বা ত্রুটি নম্বর (1-65 কে) ফেরত দিতে ব্যবহৃত হয়। উপরের সমস্তগুলি ইঙ্গিত করে যে স্প_এক্সেকটসেস্কএল একটি মান দেয় না, যা সঠিক নয়। sp_executesql সাফল্যের জন্য 0 এবং ব্যর্থতার জন্য অন্য কোনও সংখ্যা ফিরে আসবে।
নীচে, @ আমি 2727 ফিরে আসবে
DECLARE @s NVARCHAR(500)
DECLARE @i INT;
SET @s = 'USE [Blah]; UPDATE STATISTICS [dbo].[TableName] [NonExistantStatisticsName];';
EXEC @i = sys.sp_executesql @s
SELECT @i AS 'Blah'
এসএসএমএস এই এমএসজি 2727, স্তর 11, রাজ্য 1, লাইন 1 প্রদর্শন করবে সূচকটি 'ননএক্সিস্টিটিভ স্ট্যাটিক্সনাম' খুঁজে পাচ্ছে না।
@ ভ্যালু টেবিল টেবিল (মান ভ্রচার (100)) ঘোষণা করুন
SELECT @sql = N'SELECT SRS_SizeSetDetails.'+@COLUMN_NAME+' FROM SRS_SizeSetDetails WHERE FSizeID = '''+@FSizeID+''' AND SRS_SizeSetID = '''+@SRS_SizeSetID+'''';
INSERT INTO @ValueTable
EXEC sp_executesql @sql;
SET @Value='';
SET @Value = (SELECT TOP 1 Value FROM @ValueTable)
DELETE FROM @ValueTable
আপনি যদি 1 টির বেশি মান ফেরত চান তবে এটি ব্যবহার করুন:
DECLARE @sqlstatement2 NVARCHAR(MAX);
DECLARE @retText NVARCHAR(MAX);
DECLARE @ParmDefinition NVARCHAR(MAX);
DECLARE @retIndex INT = 0;
SELECT @sqlstatement = 'SELECT @retIndexOUT=column1 @retTextOUT=column2 FROM XXX WHERE bla bla';
SET @ParmDefinition = N'@retIndexOUT INT OUTPUT, @retTextOUT NVARCHAR(MAX) OUTPUT';
exec sp_executesql @sqlstatement, @ParmDefinition, @retIndexOUT=@retIndex OUTPUT, @retTextOUT=@retText OUTPUT;
প্রত্যাবর্তিত মানগুলি @retIndex এবং @retText এ রয়েছে
আপনি চেষ্টা করতে পারেন এমন কিছু এখানে
DECLARE @SqlStatement NVARCHAR(MAX) = ''
,@result XML
,@DatabaseName VARCHAR(100)
,@SchemaName VARCHAR(10)
,@ObjectName VARCHAR(200);
SELECT @DatabaseName = 'some database'
,@SchemaName = 'some schema'
,@ObjectName = 'some object (Table/View)'
SET @SqlStatement = '
SELECT @result = CONVERT(XML,
STUFF( ( SELECT *
FROM
(
SELECT TOP(100)
*
FROM ' + QUOTENAME(@DatabaseName) +'.'+ QUOTENAME(@SchemaName) +'.' + QUOTENAME(@ObjectName) + '
) AS A1
FOR XML PATH(''row''), ELEMENTS, ROOT(''recordset'')
), 1, 0, '''')
)
';
EXEC sp_executesql @SqlStatement,N'@result XML OUTPUT', @result = @result OUTPUT;
SELECT DISTINCT
QUOTENAME(r.value('fn:local-name(.)', 'VARCHAR(200)')) AS ColumnName
FROM @result.nodes('//recordset/*/*') AS records(r)
ORDER BY ColumnName
এটি অনেক দিন আগে ছিল, তাই এখনও এটির প্রয়োজন আছে কিনা তা নিশ্চিত হন না তবে আপনি পূর্ববর্তী এসকিএল স্টেটমেন্টের সাথে কতগুলি সারি প্রভাবিত হয়েছিল তা দেখতে আপনি @@ ROWCOUNT ভেরিয়েবলটি ব্যবহার করতে পারেন।
এটি সহায়ক যখন উদাহরণস্বরূপ আপনি একটি গতিশীল আপডেট বিবৃতি নির্মাণ করেন এবং এটি এক্সিকিউট দিয়ে চালান। কতগুলি সারি আপডেট হয়েছে তা @@ ROWCOUNT দেখায়।
এটি আমার পক্ষে কাজ করেছে:
DECLARE @SQL NVARCHAR(4000)
DECLARE @tbl Table (
Id int,
Account varchar(50),
Amount int
)
-- Lots of code to Create my dynamic sql statement
insert into @tbl EXEC sp_executesql @SQL
select * from @tbl