Main
Main
文章目录
  1. 0x10.”SQL SERVER 2012 尝试读取或写入受保护的内存。这通常指示其他内存已损坏”-2016年02月14日17:15:13
  2. 0x0F.MYSQL中文乱码–2016年02月13日19:01:21
  3. 0x0E.SQL 拼接字段查询–2015年10月16日
  4. 0x0D.SQL TRUNC() 截取字符串/日期–2015年12月10日11:29:48
  5. 0x0C.DISTINCT 去重复–2015年12月10日11:28:12
  6. 0x0B.查询数据库中某一字段重复值–2015年10月16日
  7. 0x0A.sql 分页获取数据的 存储过程代码–2015年8月12日13:41:34
  8. 0x09.sql server的sql分页代码–2015年7月22日13:27:49
  9. 0x08.sql从其他数据库中复制数据到另一个数据库 错误–2015年7月3日19:08:39
  10. 0x07.Oracle SQL分页–2015年7月18日18:32:31
  11. 0x06.Oracle报SQL大小写转换
  12. 0x05.Oracle报ORA-08103: 对象不再存在’
  13. 0x04.如何把查询到的结果插入到另一个表中
  14. 0x03.Oracle报ORA-01861: 文字与格式字符串不匹配’
  15. 0x02.Oracle报ORA-00936:缺失表达式
  16. 0x00.Oracle替换符号
  17. 0x01.Oracle报ORA-01745: 无效的主机/赋值变量名

SQL Related Error

0x10.”SQL SERVER 2012 尝试读取或写入受保护的内存。这通常指示其他内存已损坏”-2016年02月14日17:15:13

解决方案: netsh winsock reset

0x0F.MYSQL中文乱码–2016年02月13日19:01:21

mysql5.5及以上
Linux下,修改/etc/mysql/my.cnf文件,在指定位置添加如下代码

1
2
3
4
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8

重启mysql服务

1
sudo /etc/init.d/mysql restart

查看mysql数据库字符集

1
mysql> show variables like 'character%';

0x0E.SQL 拼接字段查询–2015年10月16日
  • Sql Server
    1
    SELECT CAST(COLUMN1 AS VARCHAR(10)) + '-' + CAST(COLUMN2 AS VARCHAR(10) ...)  as P FROM TABLE
  • Oracle
    1
    SELECT (COLUMN1 || '-' || COLUMN2) AS P FROM TABLE
0x0D.SQL TRUNC() 截取字符串/日期–2015年12月10日11:29:48

有个需求就是 查询 相同日期(不同时间) 的 数量总和,这时就可以用到TRUNC()函数把’时间’去掉

1
SELECT SUM(A.QTY) OVER(PARTITION BY TRUNC(A.DATE)) FROM TEST A WHERE A.DATE >= TO_DATE('DATE1','YYYY-MM-DD') AND A.DATE<=TO_DATE('DATE2','YYYY-MM-DD')

0x0C.DISTINCT 去重复–2015年12月10日11:28:12
0x0B.查询数据库中某一字段重复值–2015年10月16日
1
select * fromwhere b in (select b fromgroup by b having count(*)>1)
0x0A.sql 分页获取数据的 存储过程代码–2015年8月12日13:41:34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CREATE PROCEDURE GetListByPage
@pageSize int ,
@pageIndex int,
@total int out
AS
BEGIN
SET NOCOUNT ON;
declare @startIndex int ,@endIndex int
set @startIndex =(@pageIndex - 1)*@pageSize+1
set @endIndex = @pageIndex*@pageSize
select * from(
select rows=ROW_NUMBER() over(order by id desc),* from DR_Type where 1=1 ) t
where t.rows>=@startIndex and t.rows<=@endIndex
--total
select @total=COUNT(1) from DR_Type where 1=1
END
GO
0x09.sql server的sql分页代码–2015年7月22日13:27:49
1
select * from (select *,row_number() over(order by p.Id desc) as num from qunlist p where 1=1 ) s where s.num between @startIndex and @endIndex
0x08.sql从其他数据库中复制数据到另一个数据库 错误–2015年7月3日19:08:39

“仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表’stulnfo’中的标识列指定显式值。” 说明有一列为自动增长,自动增长列为系统自己设定,不需要复制

0x07.Oracle SQL分页–2015年7月18日18:32:31
1
2
3
4
SELECT *
FROM (SELECT ROWNUM AS rowno, t.*
FROM emp t ROWNUM <= indexEnd) s
WHERE s.rowno >= indexStart;
0x06.Oracle报SQL大小写转换

转换为大写:UPPER(字段名)
转换为小写:LOWER(字段名)

0x05.Oracle报ORA-08103: 对象不再存在’

当时 在测试的时候 传给 DataTable的 sql语句 在数据库中 能直接查出数据,
但是 用.NET却查不出。
  原因 就是 在封装好的DBHelper中 把 sql语句 全部转成大写了!!
  搞不懂 为什么 查不出 数据 却报 上面的错误!
    还好已经解决问题。
图片

0x04.如何把查询到的结果插入到另一个表中
1
insert into OEM_ORDER(OEM_CODE) select OEM_CODE from BASE_OEM where OEM_NAME ='阳光'  --OEM_CODE为相同字段
0x03.Oracle报ORA-01861: 文字与格式字符串不匹配’

查询oracle中date属性的值时,必须用to_date(‘2015/05/29’,’yyyy-mm-dd hh24:mi:ss’)转换,否则 会报错!

1
select * from book where PRD_DATE >=to_date('2015/05/29','yyyy-mm-dd hh24:mi:ss') and PRD_DATE <=to_date('2015/05/30','yyyy-mm-dd hh24:mi:ss')  order by PRD_DATE desc

0x02.Oracle报ORA-00936:缺失表达式

value!! 应该是 values(insert语句啊!)

0x00.Oracle替换符号

Oracle 替换符 用 ‘:’ sql Server 中用 ‘@’

0x01.Oracle报ORA-01745: 无效的主机/赋值变量名

可能原因:

  • 在sql语句中少了’,’分隔符。
  • 在绑定变量时,出现变量名和SQL保留字相同的情况。(我当时用 替换符”:date” 报这种错误)
支持一下
  • 微信扫一扫
  • 支付宝扫一扫