我有一张简单的表
EMPLOYEE
ID: int
Name: nchar(20)
Birthday: date
我创建了一个简单的过程来向EMPLOYEE
表
ADD_NEW_EMPLOYEE
CREATE PROCEDURE ADD_NEW_EMPLOYEE
@id INT,
@Name NCHAR(20),
@Birthday DATE
AS
BEGIN
INSERT INTO EMPLOYEE
VALUES(@id, @Name, @Birthday)
END
当我执行程序时(右键单击 - > Execute Stored Procedure...
),我收到错误
' - '
附近的语法不正确
关于日期的价值。
代码执行面板:
EXEC @return_value = [dbo].[ADD_NEW_EMPLOYEE]
@id = 3,
@Name = N'James Bond',
@Birthday = 1995-06-06
但是,如果我将@Birthday
中的ADD_NEW_EMPLOYEE
类型更改为nchar
类型。
该值编码为@Birthday = N'1995-06-06'
,并且该过程正常执行。但这样做会使过程中的声明与表中的值类型不对应。
你能告诉我解决这个问题的方法吗?
我使用的版本是Microsoft SQL Server 2014
请注意,我使用SQL Server执行该过程(右键单击该过程并选择“执行存储过程”),一个表填充值显示,我只需填写变量数据。
#UPDATE:
因此,在表格中输入值,我必须输入带有单引号的'1995-06-06'
而不是1995-06-06
而不带引号。
如果像C#这样的另一个程序执行此过程并且调用函数忘记将日期括在引号中怎么办?这是SQL Server 2014中的错误吗?我觉得这是个玩笑。
执行时出现语法错误:
这会起作用,但太笨拙......(请注意引号''包围日期值)
如果将值加到nchar
变量,则执行时,该值将自动括在引号' '
中。对于date
类型,该值直接执行而没有包含适当的引号。这导致了问题。
答案 0 :(得分:2)
缺少单个qoutes将日期换成单引号'1995-06-06'
@Birthday = '1995-06-06'
答案 1 :(得分:0)
缺少分号和单引号日期插入查询和单引号'1995-06-06'
INSERT INTO EMPLOYEE VALUES(@id, @Name, @Birthday);
@Birthday = '1995-06-06'
答案 2 :(得分:0)
@Birthday 不是INT数据类型。
对于INT以外的数据类型,我们需要使用单个单引号''
@Birthday = '1995-06-06'