0

これは私のストアドプロシージャです:

ALTER PROCEDURE [dbo].[procViewAdvSearchL1]
-- Add the parameters for the stored procedure here
    @keyword nvarchar(800),
    @CourtID    int = null,
    @SYear int = null,
    @EYear int = null

AS
BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[viewTextSearchL]'))
DROP VIEW [dbo].[viewTextSearchL]


Declare @sqlquery nvarchar(1500)
Set @sqlquery ='
CREATE VIEW viewTextSearchL
AS
    SELECT     tblCase.judgement_id AS ID, tblCase.case_number AS Case_No, tblCase.applicant_name AS Aplicant, tblCase.respondent_name AS Respondent, tblCase.case_date AS Case_Date, 
                  tblCourt.court_name AS Court_Name, tblCase.YearOfCase
FROM         tblCase INNER JOIN
                  tblCourt ON tblCase.court_id = tblCourt.court_id INNER JOIN
                  tblJudgement ON tblCase.judgement_id = tblJudgement.judgement_id
WHERE     CONTAINS(tblJudgement.judgement_desc,'+@keyword+') AND (CAST(tblCase.YearOfCase AS int) BETWEEN '+@SYear+' AND  '+@EYear+')' 

EXECUTE(@sqlquery)

END

しかし、これはエラーになります

メッセージ 137、レベル 15、状態 2、手順 viewTextSearchL、行 9
スカラー変数「@SYear」を宣言する必要があります。

4

3 に答える 3

1

投稿されたコードに基づいて、次の変換エラーが発生することしかわかりません。

Conversion failed when converting the varchar value '' to data type int.

以下を使用します

CONVERT(VARCHAR(4),@SYear)

CONVERT(VARCHAR(4),@EYear)
于 2013-10-11T12:52:03.057 に答える
0
@CourtID    int = null,
@SYear int = null,
@EYear int = null

上記の変数はすべて NVARCHAR で宣言する必要があります。動的クエリはそれ以外はエラーになるためです。

It Should be
@CourtID    NVARCHAR(20) = null,
@SYear NVARCHAR(20) = null,
@EYear NVARCHAR(20) = null

exec sp_executeを除いてクエリを実行するために使用しますEXECUTE(@sqlquery)

詳細については、ここをクリックしてください

于 2013-10-11T13:08:48.237 に答える
0

ここに修正されたクエリがあります

SELECT     tblCase.judgement_id AS ID, tblCase.case_number AS Case_No, tblCase.applicant_name AS Aplicant, tblCase.respondent_name AS Respondent, tblCase.case_date AS Case_Date, 
                      tblCourt.court_name AS Court_Name, tblCase.YearOfCase
    FROM         tblCase INNER JOIN
                      tblCourt ON tblCase.court_id = tblCourt.court_id INNER JOIN
                      tblJudgement ON tblCase.judgement_id = tblJudgement.judgement_id
    WHERE     CONTAINS(tblJudgement.judgement_desc,'+@keyword+') AND (tblCase.court_id = '+CONVERT(VARCHAR(4),@CourtID)+')AND (CAST(tblCase.YearOfCase AS int) BETWEEN '+CONVERT(VARCHAR(4),@SYear)+' AND  '+CONVERT(VARCHAR(4),@EYear)+')' 
于 2013-10-12T07:47:57.070 に答える