我正在尝试在SQL Server中创建存储过程,但每当我尝试执行它时,我都会收到错误:
Msg 137,Level 15,State 2,Line 48
必须声明标量变量“@FirstName”
我以为我在FirstName
条件下声明WHERE
,但似乎不对。
CREATE PROCEDURE Example6
@FirstName VARCHAR(50),
@LastName VARCHAR(50),
@MiddleName VARCHAR(50)
AS
SELECT
[employee_id], [employee_type_id],
[HR_status_id], [employer_id],
[fName], [mName], [lName],
[address], [city], [state_id], [zip],
[hireDate], [currDate],
[ssn], [ext_emp_id],
[terminationDate], [dob],
[initialMeasurmentEnd],
[plan_year_id], [limbo_plan_year_id], [meas_plan_year_id],
[modOn], [modBy],
[plan_year_avg_hours], [limbo_plan_year_avg_hours],
[meas_plan_year_avg_hours], [imp_plan_year_avg_hours],
[classification_id], [aca_status_id], [ResourceId]
FROM
dbo.employee
WHERE
[fName] = @FirstName
AND [lName] = @LastName
AND [mName] = @MiddleName
AND @FirstName LIKE '%son%' OR @LastName LIKE '%son%';
答案 0 :(得分:2)
您应该在参数子句中添加括号 试试那个:
CREATE PROCEDURE Example6
(@FirstName varchar(50),
@LastName varchar(50),
@MiddleName varchar(50))
AS
SELECT [employee_id]
,[employee_type_id]
,[HR_status_id]
,[employer_id]
,[fName]
,[mName]
,[lName]
,[address]
,[city]
,[state_id]
,[zip]
,[hireDate]
,[currDate]
,[ssn]
,[ext_emp_id]
,[terminationDate]
,[dob]
,[initialMeasurmentEnd]
,[plan_year_id]
,[limbo_plan_year_id]
,[meas_plan_year_id]
,[modOn]
,[modBy]
,[plan_year_avg_hours]
,[limbo_plan_year_avg_hours]
,[meas_plan_year_avg_hours]
,[imp_plan_year_avg_hours]
,[classification_id]
,[aca_status_id]
,[ResourceId]
FROM dbo.employee
WHERE @FirstName LIKE '%son%' OR @LastName LIKE '%son%';
答案 1 :(得分:2)
您需要在()中包装存储过程的参数,然后调用存储过程,例如:
EXEC程序' Son',' Son'' Son'
CREATE PROCEDURE Example6
(
@FirstName varchar(50),
@LastName varchar(50),
@MiddleName varchar(50)
)
AS
SELECT [employee_id]
,[employee_type_id]
,[HR_status_id]
,[employer_id]
,[fName]
,[mName]
,[lName]
,[address]
,[city]
,[state_id]
,[zip]
,[hireDate]
,[currDate]
,[ssn]
,[ext_emp_id]
,[terminationDate]
,[dob]
,[initialMeasurmentEnd]
,[plan_year_id]
,[limbo_plan_year_id]
,[meas_plan_year_id]
,[modOn]
,[modBy]
,[plan_year_avg_hours]
,[limbo_plan_year_avg_hours]
,[meas_plan_year_avg_hours]
,[imp_plan_year_avg_hours]
,[classification_id]
,[aca_status_id]
,[ResourceId]
FROM dbo.employee
WHERE
[FirstName] LIKE @FirstName OR [LastName] LIKE @LastName
答案 2 :(得分:0)
在SSMS中,如果右键单击“存储过程”并选择“新建存储过程”,则会为您生成此模板。注意SP中缺少的BEGIN和END:
-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
-- Add the parameters for the stored procedure here
<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,
<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO