操作数类型冲突-SQL Server INSERT存储过程



我理解这个错误,只是不确定为什么会发生这种情况。我编写了一个简单的插入过程来更新用户列表。

错误:

消息206,级别16,状态2,过程addNewUser,行0[批处理开始行2]
操作数类型冲突:int与日期不兼容

过程声明:

CREATE PROCEDURE [dbo].[addNewUser] 
@fName VARCHAR(255), 
@lname VARCHAR(255), 
@dob DATE, 
@email VARCHAR(255), 
@gender VARCHAR(255), 
@level VARCHAR(255) AS
INSERT INTO [dbo].[User] ([firstname], [lastname], [dob], [email], [gender], [accesslevel]) 
VALUES ('@fName ', N'@lname', @dob, N'@email', N'@gender', N'@level')

调用程序:

DECLARE @return_value int
EXEC    @return_value = [dbo].[addNewUser]
@fName = N'Ste',
@lname = N'King',
@dob = 19780103,
@email = N'Books@email.com',
@gender = N'Male',
@level = N'Free'
SELECT  'Return Value' = @return_value
GO

只需将@dob = 19780103置于引号'1978-01-03':中

USE [t7068097]
GO
DECLARE @return_value int
EXEC    @return_value = [dbo].[addNewUser]
@fName = N'Ste',
@lname = N'King',
@dob = '1978-01-03',
@email = N'Books@email.com',
@gender = N'Male',
@level = N'Free'
SELECT  'Return Value' = @return_value
GO

更新:

SELECT CAST('1978-1-1' AS DATE)
SELECT CAST('19780101' AS DATE)

首先,您的过程是错误的。你不应该为了你的目的把你的变量放在一个报价中:

ALTER PROCEDURE [dbo].[addNewUser] 
@fName  varchar(255), 
@lname  varchar(255), 
@dob    DATE, 
@email  varchar(255), 
@gender varchar(255), 
@level  varchar(255) 
AS
INSERT [dbo].[User] 
(
[firstname]
, [lastname]
, [dob]
, [email]
, [gender]
, [accesslevel]
) 
VALUES 
( 
@fName 
, @lname
, @dob
, @email
, @gender
, @level
)
GO

您还可以向日期字段发送int值。你需要输入一个报价:

DECLARE @return_value int
EXEC    @return_value = [dbo].[addNewUser]
@fName  = N'Ste',
@lname  = N'King',
@dob    = '19780103',
@email  = N'Books@email.com',
@gender = N'Male',
@level  = N'Free'
SELECT  'Return Value' = @return_value

最新更新