如何编写存储过程以在2个日期之间搜索数据?

时间:2018-12-07 03:05:19

标签: sql-server

这是我尝试复制的代码

ALTER PROCEDURE [dbo].[USP_REPORTING_Buku]
    @Kategori NVARCHAR(10),
    @Penerbit NVARCHAR(50),
    @Terbit DATE,
    @TerbitOld DATE
AS 
BEGIN
    SET NOCOUNT ON;

    SELECT 
        BookID, ISBN, Judul, Kategori, Terbit, Penerbit 
    FROM 
        dbo.tblM_Buku 
    WHERE 
        Kategori  '%' + @Kategori + '%'
        AND Penerbit  '%' + @Penerbit + '%'
        OR (Date BETWEEN @DateOld AND @Date)
END

但是我试图删除“ Penerbit”,而仅使用kategori和日期。

所以我用

ALTER PROCEDURE [dbo].[USP_REPORTING_Buku]
    @Kategori NVARCHAR(10),
    @Date DATE,
    @DateOld DATE
AS 
BEGIN
    SET NOCOUNT ON;

    SELECT 
        BookID, ISBN, Judul, Kategori, Date
    FROM 
        dbo.tblM_Buku
    WHERE 
        Kategori  '%' + @Kategori + '%'
        OR (Date BETWEEN @DateOld AND @Date)
END

但是我得到一个错误:

  

必须声明标量变量“ @DateOld”

我该如何解决?

1 个答案:

答案 0 :(得分:0)

我同意@Dale Burrel的观点,因为定义@DateOld时一定不要出错。但是,过程中缺少'like'关键字的子句,并且在“ ALTER PROCEDURE”之后和“ AS BEGIN”之前也使用了括号,这是一个问题。下面是正确的存储过程:

ALTER PROCEDURE [dbo].[USP_REPORTING_Buku]
(
  @Kategori nvarchar(10),
  @Date date,
  @DateOld date
)
AS 
BEGIN
  SET NOCOUNT ON;

  SELECT BookID, ISBN, Judul, Kategori, Date
  FROM dbo.tblM_Buku
  WHERE Kategori like '%' + @Kategori + '%'
  OR (Date BETWEEN @DateOld AND @Date)
END

希望它能解决您的问题。