PDA

View Full Version : اشکال این sp



rezaei manesh
دوشنبه 01 مرداد 1386, 17:25 عصر
سلام
من یک پروسیجر نوشتم اما نمی دونم چرا خطا می ده ظاهرش که درسته ؟!!!


ALTER PROCEDURE [dbo].[SpPrjRulePersonsByIdxidName] (@Id as decimal,@CurDate as char(5),@IdNAme as varchar(50))
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SqlStr AS VARCHAR(400),
@paramlist as varchar(300)
SET @SqlStr='Select * from
PrjRule Inner Join
(Select personid,Max(BeginDate) As MyBDate
From PrjRule where begindate<= @xCurDate and enddate >= @xCurDate Group By personid) As MyPrjRule
On (MyPrjRule.personid=PrjRule.personid And PrjRule.BeginDate=MyPrjRule.MyDate) where @xIdname = @xId '
select @paramlist ='@xId decimal ,
@xCurDate char(5),
@xIdname varchar(50)'

EXEC sp_executesql @SqlStr,@paramlist,@Id,@CurDate,@IdName
END



اینم فراخوانی و خطا


exec [SpPrjRulePersonsByIdxidName] 11,'05/01','WorkGrpid'

Eroor:
Msg 214, Level 16, State 2, Procedure sp_executesql, Line 1
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.

این باید رکورد های خاصی رو در یک محدوده تاریخ برگرداند

AminSobati
چهارشنبه 03 مرداد 1386, 23:03 عصر
سلام،
متغیر SqlStr رو از جنس nvarchar تعریف کنید

rezaei manesh
پنج شنبه 04 مرداد 1386, 07:53 صبح
سلام
بله جناب ثباتی همین کار رو کردم مشکلم حل شد اما خطا های دیگری داد که اونا رو هم درست کردم و در کل الان داره کار می کنه اما
حقیقتش الان نگران سرعتش هستم چون کویری هست که باید به دفعات استفاده کنم اما نمی دونم که سرعتش مناسب هست یا نه سایز کل داده های بانک حدود 2000 تا رکورد می شه حالا 500 تا بالا یا پایین و...
من راحل حل دیگری غیر این نتونستم پیدا کنم قبلا همین رو با کرسر نوشتم اما حالا اینو به این شکل نمی دونم راه حل بهتری هم هست یا نه ؟!

AminSobati
پنج شنبه 04 مرداد 1386, 23:49 عصر
حامد جان کاری که میشه با Query انجام داد با Cursor انجام نمیدیم. سرعت Query رو باید با ایندکس حتی المقدور بهینه کنین