0
動的SQLソリューションを使用してストアドプロシージャを作成する必要があるのは、複数の入れ子を条件に含める必要があるためです。クエリアナライザでコードを実行すると、次のエラーが表示されます。私のストアドプロシージャで何が問題になっています
Msg 156, Level 15, State 1, Line 13
Incorrect syntax near the keyword 'Procedure'.
私が作成しようとしています手順は次のとおりです。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[sp_Payments]')
AND type in (N'P', N'PC'))
Drop procedure sp_Payments
BEGIN
DECLARE @SQL varchar(max),
@categoryID smallint,
@startDate datetime,
@stopDate datetime,
@debtCode tinyint,
@izEscrow tinyint
Create Procedure sp_Payments
(@categoryID smallint,
@startDate datetime,
@stopDate datetime,
@debtCode tinyint,
@izEscrow tinyint
)
AS
BEGIN
Declare @Payments table(
paydate datetime,
principaldue float,
interestdue float,
debtid int,
debtname varchar(50),
debtnumber varchar(10),
fsrc varchar(40),
category varchar(40),
PayMonth tinyint,
PayYear int
)
SET @SQL = '
insert into @Payments
select dtl.paydate,
dtl.principaldue,
dtl.interestdue,
dtl.debtid,
dmf.debtname,
dmf.debtnumber,
fsrc.fsrc,
app.category,
month(dtl.paydate) as PayMonth,
case
when month(PayDate) <= 6 then year(PayDate)
else year(PayDate)+1
end "PayYear"
from debtdetail dtl
inner join masterfile dmf
on dtl.debtid = dmf.debtid
inner join categories app
on dmf.categoryid = app.categoryid
left outer join fsrc
on dmf.fsrcid = fsrc.fsrcid
left outer join debtissues di
on dmf.issueid = di.issueid
where dtl.debtid in
(select debtid from masterfile
where categoryid = @categoryID '
IF @debtCode > 0
SET @SQL = @SQL + '
AND codeid = @debtCode
'
SET @SQL = @SQL + '
)
AND di.iscontingent = 0
'
IF @stopDate = ''
SET @SQL = @SQL + '
and dtl.paydate >= @startDate
'
ELSE
SET @SQL = @SQL + '
and dtl.paydate between
@startDate AND @stopDate
'
IF @izEscrow = 0
SET @SQL = @SQL + '
and dtl.isescrow = 0
'
SET @SQL = @SQL + '
and (principaldue + interestdue) > 0 and dtl.active = 1
order by dtl.Paydate, dmf.DebtNumber '
EXEC @SQL
END
SELECT * from @Payments
RETURN
END
任意の助けいただければ幸いです。事前に感謝
をあなたはここにあなたのバッチ間 'GO'sを必要としています。 – JNK
他にも問題があります。これはかなり後ろ向きのデザインです。なぜすべての変数を宣言してから、同じ名前のparamsを作成するのですか? – JNK
クエリアナライザ? Management Studioを意味しましたか? SQL Server 2000に対してこのコードを実行している場合、動作しないようにする多くのことがあります。使用しているSQL Serverのバージョンを指定してください。 [tag:sql-server]は具体的ではありません。 –