sql-server - 以日期为参数在T-SQL中执行存储过程

标签 sql-server tsql date stored-procedures

<分区>

我需要制作一个存储过程,它将供应商名称、开始日期和结束日期作为参数,并计算给定时间间隔内该供应商的总收入。我正在使用罗斯文。该过程如下所示:

CREATE PROC usp_GetTotalIncomeByPeriod (
    @companyName nvarchar(40),
    @startDate date,
    @endDate date)
AS
    BEGIN
        SELECT SUM(od.UnitPrice * od.Quantity * (1 - od.Discount))
        FROM Orders o
            JOIN [Order Details] od
                ON o.OrderId = od.OrderId
            JOIN Products p
                ON od.ProductID = p.ProductID
            JOIN Suppliers s
                ON p.SupplierID = s.SupplierID
        WHERE s.CompanyName = @companyName
            AND (o.OrderDate BETWEEN @startDate AND @endDate);
    END
GO

问题是我无法使用以下调用实际执行它:

EXEC dbo.usp_GetTotalIncomeByPeriod @companyName = 'Exotic Liquids', 
                                    @startDate = DATEFROMPARTS(1900, 01, 01),
                                    @endDate = DATEFROMPARTS(2000, 1, 1);

DATEFROMPARTS 函数本身似乎运行良好,但我无法设法使其作为参数运行。它不断给我“1900 年附近的语法错误”。我想念什么?

最佳答案

函数的大括号

  DATEFROMPARTS()

导致错误。 因此,要么不使用该函数直接传递日期,要么使用 PLSQL block 通过将 DATEFROMPARTS() 的结果存储在变量中来实现,然后将该变量传递给存储过程。

 DECLARE    
    @return_value int,
    @vDate1 date,
    @vDate2 date

SET @vDate1=DATEFROMPARTS(1900, 01, 01);
SET @vDate2=DATEFROMPARTS(2000, 01, 01);

EXEC @return_value = dbo.usp_GetTotalIncomeByPeriod 
                                @companyName = 'Exotic Liquids', 
                                @startDate = @vDate1,
                                @endDate = @vDate2;

关于sql-server - 以日期为参数在T-SQL中执行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27335558/

相关文章:

javascript - 为什么 2 位数字不适用于 Date.toLocaleTimeString?

sql-server - HTML5 视频标签。某些 .MP4 视频在 Chrome 中不起作用

sql-server - SQL Server 2016标准版linux安装

MySQL SELECT 查询字符串中包含的字段值

sql - 在用户定义的函数中增加字母数字值

sql - 如何在数据库中的所有 varchar 和 nvarchar 字段之间转换换行符(将\r\n 替换为\n)

ios - 日期到毫秒并在 Swift 中返回日期

javascript - 如何让 luxon 在时区输出不带冒号的 ISO 日期格式

sql-server - SQL Server 用户凭据存储在哪里?

sql-server - ASP.NET Core/Entity Framework - 使用多对多关系时,HTTP Post 不会在联接表中创建实体