我理解这个错误,只是不确定为什么会发生这种情况。我编写了一个简单的插入过程来更新用户列表。
错误:
消息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