View Full Version : برگردان مقدار از پروسجر
aliasghar
شنبه 19 فروردین 1385, 09:24 صبح
سلام و خسته نباشید
من میخواهم یک پروسجر را به صورت sql دینامیک فراخوانی کنم یعنی توسط یک رشته و فراخوانی دستور exec(@sql) اما مشکل در برگرداندن پارامتر خروجی پروسجر است چون متغیر هایی را که تعریف میکنم در هنگام اجرای دستور ناشناخته هستند
این مشکل چه راه حلی دارد
ممنون
hgkhatir
شنبه 19 فروردین 1385, 09:25 صبح
میشه کمی بیشتر توضیح دهید؟
Kamyar.Kimiyabeigi
شنبه 19 فروردین 1385, 12:33 عصر
سلام و خسته نباشید
من میخواهم یک پروسجر را به صورت sql دینامیک فراخوانی کنم یعنی توسط یک رشته و فراخوانی دستور exec(@sql) اما مشکل در برگرداندن پارامتر خروجی پروسجر است چون متغیر هایی را که تعریف میکنم در هنگام اجرای دستور ناشناخته هستند
این مشکل چه راه حلی دارد
ممنون
لطفا" خود procedure تونو اینجا بزارین تا بدونیم که اصلا" چی کار کردین
AminSobati
شنبه 19 فروردین 1385, 19:34 عصر
SP_EXECUTESQL رو امتحان کنید
aliasghar
یک شنبه 20 فروردین 1385, 12:39 عصر
از همگی اساتید ممنون
تست می کنم و دوباره مزاحم میشم
aliasghar
یک شنبه 20 فروردین 1385, 16:29 عصر
سلام
راستش از اون راهی هم که جناب ثباتی فرمودند نشد
فکر می کنم برای اجرای دستورات درون Exec(@SQL) کانکشن جدیدی ایجاد میشه که متغیر های محلی را نمی شناسه یا باید متغیر ها بصورت Global تعریف بشن یا باید متغیر ها را توسط همان Command ایجاد کرد
من برای حل این مشکل از روش زیر استفاده کردم
نمی دونم راه بهتری هم هست یا نه ولی بحر حال اون را اینجا میگذارم که اگه کسی خواست بتونه استفاده کنه
راستی آیا میشه متغیر هم بصورت Gloabl تعریف و استفاده بشه مثل Error@@؟
drop table ##test
DECLARE @Db_Name varchar(200);
Declare @Proc_Name Varchar(200);
DECLARE @SQL Varchar(4000);
SET @Db_Name = 'Test_DB';
SET @Proc_Name = 'Test_Proc';
SET @SQL = 'DECLARE @RC int;'+char(13);
SET @SQL = @SQL +'DECLARE @Tarikh datetime; '+char(13);
SET @SQL = @SQL +'DECLARE @Arzesh_Kind varchar(1);'+char(13);
SET @SQL = @SQL +'Select @Tarikh = '+'''2008-01-01'''+char(13);
SET @SQL = @SQL +'Select @Arzesh_Kind ='+'''f'''+char(13);
SET @SQL = @SQL +'create table ##test'+char(13);
SET @SQL = @SQL +'('+char(13);
SET @SQL = @SQL +' R_V int '+char(13);
SET @SQL = @SQL +')'+char(13);
SET @SQL = @SQL +'EXEC @rc = '+@Db_Name+'..'+@Proc_Name+' @Tarikh, @Arzesh_Kind'+char(13);
SET @SQL = @SQL +'insert into ##test values(@rc)'+char(13);
print @SQL
exec(@SQL)
if (Select R_V from ##test) = 1
Begin
-- Do eny thing
End Else RaisError
drop table ##test
باز هم ممنون
AminSobati
یک شنبه 20 فروردین 1385, 23:28 عصر
چرا نمیشه علی اصغر جان!؟
فقط کافیه Output Parameter رو مشخص کنید:
DECLARE @OrderCount INT
DECLARE @CustID NVARCHAR(5)
DECLARE @xOrderCount INT
DECLARE @xCustID NVARCHAR(5)
DECLARE @SQL NVARCHAR(4000)
SET @SQL='SELECT @xOrderCount=COUNT(*) FROM ORDERS WHERE CustomerID=@xCustID'
SET @CustID='ALFKI'
EXEC SP_EXECUTESQL @SQL,
N'@xOrderCount INT OUTPUT, @xCustID NVARCHAR(5)',
@OrderCount output,@CustID
SELECT @OrderCount
See Also:
http://support.microsoft.com/default.aspx?scid=KB;EN-US;q262499
aliasghar
دوشنبه 21 فروردین 1385, 08:14 صبح
این جمله از همون ادرسی که لطف کردین نقل میشه
although this is not documented in SQL Server Books Online
این یکی از تفاوتهای اشخاص بی تجربه ای مثل من و اساتیدی مثل شما ست
به هر حال ممنون و متشکرم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.