SQL 不能执行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 不能执行相关的知识,希望对你有一定的参考价值。
INSERT INTO Strategies (Name, ShortName, Description, ID)
VALUES ('ww', 'www', 'wwww', 3); SELECT @@IDENTITY AS newID;
报“分析查询时出错。 [ Token line number = 1,Token line offset = 127,Token in error = SELECT ]”
不知道是哪里的问题。
得到新插入数据的"自动增量ID",然后要利用这个ID在另外一张表里插入相关数据。
我在SQL查询器里也可以运行,并获得相应的值,可是用C# 中的SQLCeCommand.ExecuteScalar()执行就会报上面那个错误。
newID要加单引号
以下是帮助中的解释
在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。
在返回插入到表的 @@IDENTITY 列的最后一个值方面,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函数类似。
@@IDENTITY 和 SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。
IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回任何会话和任何作用域中为特定表生成的标识值。有关更多信息,请参见 IDENT_CURRENT。
示例
下面的示例向带有标识列的表中插入一行,并用 @@IDENTITY 显示在新行中使用的标识值。
INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity' 参考技术A 我用msSql在中写的语句:
create table Strategies(uid int identity(1,1),Name varchar(8),ShortName varchar(8),Description varchar(8),ID int)
INSERT INTO Strategies (Name, ShortName, Description, ID) VALUES ('ww', 'www', 'wwww', 3)
SELECT @@IDENTITY AS newID
以上是可以运行的,用@@IDENTITY,表中必须包含自动增长列。你再好好检查检查。 参考技术B 关键错误在这里:
SELECT @@IDENTITY AS newID
改为
SELECT @@IDENTITY AS [newID] 参考技术C SELECT @@IDENTITY AS newID;
什么意思。?你想干嘛。?本回答被提问者采纳
pl sql developer应用问题
我在用pl sql developer工作时发现,在sql2000可执行的语句不能执行。如:select left(科目代码,8) 科目代码,sum(借方金额) 借方金额,sum(贷方金额) 贷方金额
from 凭证库
where left(科目代码,1)='4' group by left(科目代码,8)
好象where或select 中不能执行left,但如遇上述问题应如何解决,请高人指点。另外,是不是pl sql中select不能执行计算查询,sql2000可是能的,另外我在pl sql中select * from pz where year(年度)=‘2010’好相也不能执行,提示“ORA-00940:"year":标识符无效”。上面不能执行时也提示“ORA-00940:"left":标识符无效”.
YEAR()就是一个,这个是SQLSERVER的函数,在ORACLE下是不支持的。要换成ORACLE的函数。TO_CHAR(年度,'YYYY') = '2010'这样来转。
ORACLE都是使用TO_CHAR(日期,'格式')来获取日期类型具体的值的。
而LEFT,也不是ORACLE支持的函数,换成SUBSTR(字符串或字段,起始位置,截取长度)这个来完成。
select substr(科目代码,1,8) 科目代码,sum(借方金额) 借方金额,sum(贷方金额) 贷方金额
from 凭证库
where substr(科目代码,1,1)='4' group by substr(科目代码,1,8)
查询当前日期的月份等
select to_char(sysdate,'yyyy'), to_char(sysdate,'mm'), to_char(sysdate,'dd') from dual追问
你的回答非常清楚,深表感谢。但我在使用时系统仍提示“ORA-00904:"SUBSRT":标识符无效”。这是我使用的具体内容
select substr(功能分类代码,1,5) 功能分类代码,sum(借) 借方金额,sum(贷) 贷方金额
from pz
where subsrt(科目代码,1,3)='501'
group by substr(功能分类代码,1,5)
另外,如这样的命令where subsrt(科目代码,1,3)='501'and 摘要 not like '%转结余%',该如何解决
“ORA-00904:"SUBSRT":
您好,您写错了函数名。正确的名字是SUBSTR,所以会提示错误。
where substr(科目代码,1,3)='501'and 摘要 not like '%转结余%'
这个语句是支持的,没问题,直接在WHERE条件里面写就好了。
追问
连接数据库驱动包如何连接,请指教
以上是关于SQL 不能执行的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们不能在 SQL Server 中的函数内执行存储过程
SQL:当你不能使用 PARTITION 列时如何执行聚合?