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 回答