必须声明作为过程参数的标量变量
Must declare the scalar variable which is a procedure parameter
我正在尝试创建一个不存在的过程。此过程采用 date
类型的参数:
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'GetAllManualInsertionsFromDate')
CREATE PROCEDURE volumetrie.GetAllManualInsertionsFromDate
@date date
AS
BEGIN
SELECT i.Id, i.EntryDate, c.CustomerNumber, i.NbEnvelopes As envelope, i.NbBoxes As box,
c.Name, YEAR(@date) As dateYear, MONTH(@date) As dateMonth, s.Raccourci as area
FROM volumetrie.InsertionManuelle As i
INNER JOIN dbo.Customers As c ON i.ClientId = c.CustId
INNER JOIN dbo.Sites s ON i.SiteCode = s.CodeSite
WHERE i.EntryDate >= @date
END
我在使用@date 参数的所有三个地方都出现错误:
Must declare the scalar variable @date
我在 BEGIN
关键字上还遇到另一个错误,这可能会导致另一个错误:
Incorrect syntax near 'BEGIN'. Expecting EXTERNAL.
你看到我哪里做错了吗?
IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'GetAllManualInsertionsFromDate')
drop procedure GetAllManualInsertionsFromDate
go
CREATE PROCEDURE volumetrie.GetAllManualInsertionsFromDate
@date date
AS
BEGIN
SELECT i.Id, i.EntryDate, c.CustomerNumber, i.NbEnvelopes As envelope, i.NbBoxes As box,
c.Name, YEAR(@date) As dateYear, MONTH(@date) As dateMonth, s.Raccourci as area
FROM volumetrie.InsertionManuelle As i
INNER JOIN dbo.Customers As c ON i.ClientId = c.CustId
INNER JOIN dbo.Sites s ON i.SiteCode = s.CodeSite
WHERE i.EntryDate >= @date
END
- 正如@SeanLange 所说
正确的做法是:
-- =============================================
-- Create basic stored procedure template
-- =============================================
-- Drop stored procedure if it already exists
IF EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE SPECIFIC_SCHEMA = N'volumetrie'
AND SPECIFIC_NAME = N'GetAllManualInsertionsFromDate'
)
DROP PROCEDURE volumetrie.GetAllManualInsertionsFromDate
GO
CREATE PROCEDURE volumetrie.GetAllManualInsertionsFromDate
@date date
AS
SELECT i.Id, i.EntryDate, c.CustomerNumber, i.NbEnvelopes As envelope, i.NbBoxes As box,
c.Name, YEAR(@date) As dateYear, MONTH(@date) As dateMonth, s.Raccourci as area
FROM volumetrie.InsertionManuelle As i
INNER JOIN dbo.Customers As c ON i.ClientId = c.CustId
INNER JOIN dbo.Sites s ON i.SiteCode = s.CodeSite
WHERE i.EntryDate >= @date
GO
我正在尝试创建一个不存在的过程。此过程采用 date
类型的参数:
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'GetAllManualInsertionsFromDate')
CREATE PROCEDURE volumetrie.GetAllManualInsertionsFromDate
@date date
AS
BEGIN
SELECT i.Id, i.EntryDate, c.CustomerNumber, i.NbEnvelopes As envelope, i.NbBoxes As box,
c.Name, YEAR(@date) As dateYear, MONTH(@date) As dateMonth, s.Raccourci as area
FROM volumetrie.InsertionManuelle As i
INNER JOIN dbo.Customers As c ON i.ClientId = c.CustId
INNER JOIN dbo.Sites s ON i.SiteCode = s.CodeSite
WHERE i.EntryDate >= @date
END
我在使用@date 参数的所有三个地方都出现错误:
Must declare the scalar variable @date
我在 BEGIN
关键字上还遇到另一个错误,这可能会导致另一个错误:
Incorrect syntax near 'BEGIN'. Expecting EXTERNAL.
你看到我哪里做错了吗?
IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'GetAllManualInsertionsFromDate')
drop procedure GetAllManualInsertionsFromDate
go
CREATE PROCEDURE volumetrie.GetAllManualInsertionsFromDate
@date date
AS
BEGIN
SELECT i.Id, i.EntryDate, c.CustomerNumber, i.NbEnvelopes As envelope, i.NbBoxes As box,
c.Name, YEAR(@date) As dateYear, MONTH(@date) As dateMonth, s.Raccourci as area
FROM volumetrie.InsertionManuelle As i
INNER JOIN dbo.Customers As c ON i.ClientId = c.CustId
INNER JOIN dbo.Sites s ON i.SiteCode = s.CodeSite
WHERE i.EntryDate >= @date
END
- 正如@SeanLange 所说
正确的做法是:
-- =============================================
-- Create basic stored procedure template
-- =============================================
-- Drop stored procedure if it already exists
IF EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE SPECIFIC_SCHEMA = N'volumetrie'
AND SPECIFIC_NAME = N'GetAllManualInsertionsFromDate'
)
DROP PROCEDURE volumetrie.GetAllManualInsertionsFromDate
GO
CREATE PROCEDURE volumetrie.GetAllManualInsertionsFromDate
@date date
AS
SELECT i.Id, i.EntryDate, c.CustomerNumber, i.NbEnvelopes As envelope, i.NbBoxes As box,
c.Name, YEAR(@date) As dateYear, MONTH(@date) As dateMonth, s.Raccourci as area
FROM volumetrie.InsertionManuelle As i
INNER JOIN dbo.Customers As c ON i.ClientId = c.CustId
INNER JOIN dbo.Sites s ON i.SiteCode = s.CodeSite
WHERE i.EntryDate >= @date
GO