在SQL Server中执行以下语句
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SP_CandidateRegistration]') AND type in (N'P', N'PC'))
BEGIN
CREATE PROCEDURE [dbo].[SP_CandidateRegistration]
(
@UserName VARCHAR(50),
@Password VARCHAR(50),
@EmailID VARCHAR(50),
@TestId int,
@IsActiveUser INTEGER,
@USER_ID INTEGER OUTPUT
)
AS
DECLARE @UserName VARCHAR(50)
DECLARE @Password VARCHAR(50)
DECLARE @EmailID VARCHAR(50)
DECLARE @TestId int
DECLARE @IsActiveUser INTEGER
DECLARE @USER_ID INTEGER
INSERT INTO [dbo].[IER_CandidateRegistration](User_Name, Password, EmailId, Test_Id, is_active )
VALUES (@UserName, @Password, @EmailID,@TestId, @IsActiveUser)
select @USER_ID=@@identity
RETURN
END
GO
在SQL Server 2008中执行后出错
Msg 156,Level 15,State 1,Line 3
关键字'PROCEDURE'附近的语法不正确。
答案 0 :(得分:10)
CREATE PROCEDURE
语句不能与单个批处理中的其他Transact-SQL
语句组合使用。
所以,你必须这样做: -
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SP_CandidateRegistration]') AND type in (N'P', N'PC'))
DROP PROCEDURE [SP_CandidateRegistration]
GO
CREATE PROCEDURE [dbo].[SP_CandidateRegistration]
(
@UserName VARCHAR(50),
@Password VARCHAR(50),
@EmailID VARCHAR(50),
@TestId int,
@IsActiveUser INTEGER,
@USER_ID INTEGER OUTPUT
)
AS
INSERT INTO [dbo].[IER_CandidateRegistration](User_Name, Password, EmailId, Test_Id, is_active )
VALUES (@UserName, @Password, @EmailID,@TestId, @IsActiveUser)
select @USER_ID=@@identity
RETURN
GO
此外,您再次声明变量。
答案 1 :(得分:6)
您可以在仅编译和执行CREATE
的子批处理中运行IF NOT EXISTS
。
您需要首先修复过程中的错误(为什么要尝试声明与参数同名的变量也使用SCOPE_IDENTITY()
而不是@@IDENTITY
),但类似
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SP_CandidateRegistration]') AND type in (N'P', N'PC'))
BEGIN
EXEC('
CREATE PROCEDURE [dbo].[SP_CandidateRegistration] (@UserName VARCHAR(50),
@Password VARCHAR(50),
@EmailID VARCHAR(50),
@TestId INT,
@IsActiveUser INTEGER,
@USER_ID INTEGER OUTPUT)
AS
INSERT INTO [dbo].[IER_CandidateRegistration]
(User_Name,
Password,
EmailId,
Test_Id,
is_active)
VALUES (@UserName,
@Password,
@EmailID,
@TestId,
@IsActiveUser)
SELECT @USER_ID = SCOPE_IDENTITY()
RETURN
')
END
答案 2 :(得分:1)
试试这个:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[SP_CandidateRegistration]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[SP_CandidateRegistration]
GO
CREATE PROCEDURE [dbo].[SP_CandidateRegistration]
(
@UserName VARCHAR(50),
@Password VARCHAR(50),
@EmailID VARCHAR(50),
@TestId int,
@IsActiveUser INTEGER,
@USER_ID INTEGER OUTPUT
)
AS
BEGIN
DECLARE @UserName1 VARCHAR(50)
DECLARE @Password1 VARCHAR(50)
DECLARE @EmailID1 VARCHAR(50)
DECLARE @TestId1 int
DECLARE @IsActiveUser1 INTEGER
DECLARE @USER_ID1 INTEGER
INSERT INTO [dbo].[IER_CandidateRegistration](User_Name, Password, EmailId, Test_Id, is_active )
VALUES (@UserName, @Password, @EmailID,@TestId, @IsActiveUser)
select @USER_ID=@@identity
RETURN
END
GO