黑马程序员技术交流社区

标题: 关于数据库的简单错误 [打印本页]

作者: 郑丹丹1990    时间: 2013-4-5 15:00
标题: 关于数据库的简单错误
本帖最后由 郑丹丹1990 于 2013-4-5 18:49 编辑

insert into dbo.T_SalarySheet values(newid(),[Year]=2012,[Month]=12,DepartmentId='a9124d74-9ceb-49cc-9d74-1ee56c4e2737‘)

错误提示:消息 128,级别 15,状态 1,第 1 行
在此上下文中不允许使用名称 "Year"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。

why?????
作者: 管章鹏    时间: 2013-4-5 17:44
如果你是往表里面的所有列插入数据的话,这时候可以省略列名,但是如果你不是往所有的列插入数据,而是向部分列插入数据的话此时你必须将列名写出来。不知道你是属于那种情况,不过你可以把列名去掉试试,或者将表的所有列名补齐,而不是在values里面写,比如
insert into dbo.T_SalarySheet values(newid(),2012,12,'a9124d74-9ceb-49cc-9d74-1ee56c4e2737‘)
希望对你有所帮助吧!
作者: 韦俊琳    时间: 2013-4-5 18:29
sql字符串,要向数据库中插入变量时,其两边是需要加上单引号的
修改代码如下:
"insert into dbo.T_SalarySheet values('"+newid()+"',2012,12,'a9124d74-9ceb-49cc-9d74-1ee56c4e2737‘)"

原理:拼接字符串,假如如我们有a和b两个变量,要插入table里,一般首先会想到:
String sql = "insert into table values('+a+','+b+')";
但因为sql是String类型,我们要拼接的是字符串,所以,蓝色语句部分两边都应该有双引号,就变成:
string sql = "insert into table values('"+a+"','"+b+"')";
所以,可以理解为要向数据库中插入变量时,其两边是需要加上单引号,但真正原因是要符合拼接字符串规则





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2