PDA

View Full Version : استفاده از یک SP که مقدار بازگشتی دارد در sp دیگر



khorsandreza
شنبه 23 شهریور 1392, 09:36 صبح
سلام
من یک SP نوشتم که وجود یک پوشه در سرور بررسی می کنه در صورت عدم وجود مقدار 0 و در صورت وجود پوشه مقدار 1 را برمی گردانه ولی وقتی در sp دیگر استفاده می کنم خطا میده

ALTER PROCEDURE [dbo].[ChkDirExist]

(
@Param1 nvarchar(50)output
)

AS
BEGIN
DECLARE @FullDirectoryPathStatement VARCHAR(255)
SET @FullDirectoryPathStatement = 'DIR "'+@Param1+'" /B'
CREATE TABLE #DirectoryExists (IsValid VARCHAR(MAX))
INSERT INTO #DirectoryExists
EXEC xp_cmdshell @FullDirectoryPathStatement
DECLARE @Exists SMALLINT = 0
SELECT @Exists =
(SELECT COUNT(IsValid) FROM #DirectoryExists
WHERE IsValid <> 'File Not Found' AND IsValid IS NOT NULL)
DROP TABLE #DirectoryExists
return @Exists
END
--exec ChkDirExist 'E:\kanoon\kanon1392.gdb'



و روش فراخوانی در SP دوم

declare @Sql nvarchar(max)
EXECUTE ChkDirExist @MakDir OUTPUT, @xChk OUTPUT


منتها خطای زیر را میده

Msg 8144, Level 16, State 2, Procedure ChkDirExist, Line 0
Procedure or function ChkDirExist has too many arguments specified.

یوسف زالی
شنبه 23 شهریور 1392, 09:45 صبح
سلام.
داره می گه که.
اس پی شما تعداد پارامترهاش با این فراخوانی منطبق نیست. اونجا یکی دارید اینجا دوتا پاس می دید؟

khorsandreza
شنبه 23 شهریور 1392, 09:55 صبح
سلام.
داره می گه که.
اس پی شما تعداد پارامترهاش با این فراخوانی منطبق نیست. اونجا یکی دارید اینجا دوتا پاس می دید؟
سلام
اول یک ماشاا... به این حضور در نت پاسخ در کمتر از دو دقیقه
ولی اقا یوسف همانطور که می بینید یک پارامتر ارسال میشه و پارامتر دوم مقدار بازگشتی را برمی گردونه چون توی مثال های خودش هم تقریبا اینجوری نوشته
می خواستم تبدیل به فانکشن بکنم ولی دیدم یک جائی نوشتین EXEC xp_cmdshell @FullDirectoryPathStatement را قبول نمی کنه .
باز هم ممنون از محبتتان

khorsandreza
شنبه 23 شهریور 1392, 10:06 صبح
مجددا سلام
مشکل حل شد باید به روش زیر فراخوانی می کردم هرچند تکراری شاید باشه ولی برای استفاده و بسته شدن تاپیک اینجا قرار می دهم

declare @Sql nvarchar(max)
set @Sql =' EXECUTE ChkDirExist "@MakDir" '
EXEC sp_executeSql @query =@sql,@params = N'@xChk SMALLINT OUTPUT',@xChk=@xChk OUTPUT;