我正在尝试创建一个程序,如果它尚不存在的话。此过程采用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参数的所有三个地方都收到错误:
必须声明标量变量@date
我还在BEGIN
关键字上收到了另一个错误,这可能会导致另一个错误:
'BEGIN'附近的语法不正确。期待外在。
你看到我做错了吗?
答案 0 :(得分:1)
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
答案 1 :(得分:1)
这是正确的方法:
-- =============================================
-- 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