我理解该错误,我不确定为什么会这样。我编写了一个简单的插入过程来更新用户列表。
错误:
消息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
答案 0 :(得分:3)
只需将@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)
答案 1 :(得分:1)
首先,您的过程是错误的。您不应出于自己的目的将变量放在单引号中
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