下面这个sql语句是oracle语法写的,现在要执行sqlserver的数据库,结果执行不了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了下面这个sql语句是oracle语法写的,现在要执行sqlserver的数据库,结果执行不了相关的知识,希望对你有一定的参考价值。

sql语句:select * from (select ri.ReportValueAll, ri.TestItemName, ri.ItemNo, ri.Unit, ri.RefRange, ri.ResultStatus, rf.CheckDate, rf.CheckTime "
+ "from ReportFormView rf, ReportItemView ri "
+ "where rf.PatNo = '" + hid + "' and rf.SerialNo = ri.SerialNo and ri.TestItemName in (" + "'血红蛋白量', '*血红蛋白量', '嗜酸性粒细胞绝对值'" + ")"
+ "group by rf.PatNo ,rf.SerialNo, ri.ReportValueAll, ri.TestItemName, ri.Unit, ri.RefRange, ri.ItemNo, ri.ResultStatus, rf.CheckDate, rf.CheckTime "
+ "order by rf.CheckDate desc, rf.CheckTime desc) where rownum = 1
执行错误:java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
谁知道上面语句中的哪个语法在执行sqlserver数据库的时候不对啊?大神帮忙。。

参考技术A 你先把and ri.TestItemName in (" + "'血红蛋白量', '*血红蛋白量', '嗜酸性粒细胞绝对值'" + ")" 这段代码取掉看能执行不,如果不能执行就是单引号引起的。 参考技术B 我试试:

select top 1 * from (select ri.ReportValueAll, ri.TestItemName, ri.ItemNo, ri.Unit, ri.RefRange, ri.ResultStatus, rf.CheckDate, rf.CheckTime "
+ "from ReportFormView rf, ReportItemView ri "
+ "where rf.PatNo = '" + hid + "' and rf.SerialNo = ri.SerialNo and ri.TestItemName in (" + "'血红蛋白量', '*血红蛋白量', '嗜酸性粒细胞绝对值'" + ")"
+ "group by rf.PatNo ,rf.SerialNo, ri.ReportValueAll, ri.TestItemName, ri.Unit, ri.RefRange, ri.ItemNo, ri.ResultStatus, rf.CheckDate, rf.CheckTime "
+ "order by rf.CheckDate desc, rf.CheckTime desc) a追问

我试过了,您这种方式不能用

追答

我看不出来。

错误信息是什么?

oracle如何执行多条create 语句

哎-- 我最后自己在网上找到答案了,是这样的
如果你有很多表要一起创建。
在SQL2005中是可以使用GO关键字的
但是oracle没有GO
就只能这样
声明:这个方法是我在网上找到的并非我自己原创。而且在提问题之前我也不知道,是后来才找到的。
create tablename
();
/
create tablename
();
/
create tablename
();
注意这个斜杠一定要单独空一行。要不一样报错的。

参考技术A 必须赋权才可以执行create语句,下面以create table为例,
在用户的sqlplus里执行
grant create table to 用户;
之后就可以在存储过程里的动态SQL里做包含create table的语句了。
同样 create view的话就应该执行
grant create view to 用户;

如:
str := 'create table 表名 '
execute immediate str;
参考技术B 每条建表语句用分号隔开,
把所有的语句保存到一个*.sql文件中,然后再sql提示符状态下运行.
参考技术C 中间用 ; 隔开 参考技术D create or replace XXXX
();

create or replace XXXX
();

以上是关于下面这个sql语句是oracle语法写的,现在要执行sqlserver的数据库,结果执行不了的主要内容,如果未能解决你的问题,请参考以下文章

oracle if 语句

oracle 数据导入导出

oracle 中SQL 语句开发语法 SELECT INTO含义

Oracle SQL 语法含义

求oracle大神帮忙解决下面这个行列转换问题,谢谢!

oracle创建一个表的sql语句是怎样写的