总结日常工作中使用SQL遇到的坑和技巧,一是加深印象,二是方便回顾。会不定期更新。


1、多表联查时要使用表名,如果两个表的有列名相同的情况你没有加别名,那么sql编译器就不知道使用哪个列。这时进行查询会得到不可预知的结果,别问我是怎么知道的,啊……多么痛的领悟~~

2、使用SQL变量是要进行初始化,否则你在赋值的时候会出现错误

3、多表联查时ON的条件一定是两张表的列值做对比(A.Status=B.Status),如果是一张表的列的条件(A.Status=0),则可能会出现多余的数据。如果想用A.Statusw=0这要的条件,则可以先在A表中过滤,然后在和B表联查

4、尚未注册OLE DB 访问接口"Microsoft.ACE.OLEDB.12.0"。 尚未注册OLE DB 访问接口"Microsoft.ACE.OLEDB.12.0"。
   需要安装Microsoft Access Database Engine 软件

5、SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT  'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。

EXEC sys.sp_configure @configname = 'Show Advanced Options', @configvalue = 1
RECONFIGURE
EXEC sys.sp_configure @configname = 'Ad Hoc Distributed Queries', @configvalue = 1
RECONFIGURE

注:记得使用完时关闭

6、无法初始化链接服务器“(null)”的 OLE DB 访问接口“Microsoft.ACE.OLEDB.12.0”的数据源对象。
(1)控制面板/管理工具/服务/SQL Server (SQLEXPRESS)  --> 右键 属性 --> 登录 --> 设置: 登录身份=本地系统账户  -->“允许服务与桌面交互”勾上 –>  重启SQL Server 服务

(2) 修改ACE接入参数

USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO

技巧

0、列操作

增加字段

ALTER TABLE 表名 ADD 字段 类型 NOT NULL/NULL DEFAULT 默认值

修改字段

ALTER TABLE 表名 ALTER COLUMN 字段 类型 NOT NULL/NULL DEFAULT 默认值

修改字段约束

ALTER TABLE 表名 DROP CONSTRAINT 约束名 --先删除约束
ALTER TABLE 表名 ADD CONSTRAINT 约束名称 [primary key(l列名),unique(列名),default(默认值) for 列名,check(条件),foreign key(列名) references 外键表(列名)]

1、替换列值中特殊字符的sql:

UPDATE T_Doc SET C_Name=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(DOC_Name,' ',''),CHAR(13),''),CHAR(10),''),CHAR(13)+CHAR(10),''),CHAR(9),'')

char(13)是回车符
char(10)是换行符

char(9)是水平制表符

2、跨库分布式查询

OPENDATASOURCE

SELECT *FROM OPENDATASOURCE('SQLOLEDB','Data Source=服务器名称;User ID=用户名;Password=密码').Northwind.dbo.Categories

链接服务器

exec sp_addlinkedserver  '链接服务器名称','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin '链接服务器名称','false',null,'用户名','密码'
select * from 链接服务器名称.数据库名.dbo.表名

3、导入Excel表数据

EXEC sys.sp_configure @configname = 'Show Advanced Options', @configvalue = 1
RECONFIGURE
EXEC sys.sp_configure @configname = 'Ad Hoc Distributed Queries', @configvalue = 1
RECONFIGURE SELECT * INTO 表名
FROM OpenDataSource( 'Microsoft.ACE.OLEDB.12.0',
'Extended properties=Excel 12.0;Data Source="Excel文件路径";')...[sheet1$]--sheet名称
order by ROW_NUMBER() over(order by getdate()) desc --关闭
EXEC sys.sp_configure @configname = 'Ad Hoc Distributed Queries', @configvalue = 0
RECONFIGURE
EXEC sys.sp_configure @configname = 'Show Advanced Options', @configvalue = 0
RECONFIGURE

4、Sql Server 获取EXEC(动态SQL)执行后的返回值
使用sp_executesq,它支持对 Transact-SQL 字符串中指定的任何参数的参数值进行替换,但是 EXECUTE 语句不支持。

exec sp_executesql @coungtSql,N'@Count INT OUTPUT', @totalCount OUTPUT
select @totalCount

SQL 经验总结的更多相关文章

  1. Mysql之SQL经验基础积累

    1.根据create_time排序,如何确保null值的排在最前面: 解决办法: ,), a.create_time DESC 结果如下图:

  2. [转][Dapper]SQL 经验集

    condition.Append(" AND ChineseName like @name"); p.Add("@name", "%" + ...

  3. SQL server经典电子书、工具和视频教程汇总

    SQL server经典电子书.工具和视频教程汇总 SQL server经典电子书.工具和视频教程汇总 SQL Server是高校计算机专业的一门必修课程,同时众多企业采用SQL Server作为数据 ...

  4. php过滤提交数据 防止sql注入攻击

    规则 1:绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据. ...

  5. 前端要革命?看我在js里写SQL

    在日新月异的前端领域中,前端工程师能做的事情越来越多,自从nodejs出现后,前端越来越有革了传统后端命的趋势,本文就再补一刀,详细解读如何在js代码中执行标准的SQL语句 为什么要在js里写SQL? ...

  6. 欢迎来到SQL学院

    给学习SQL的同学的福利@ http://sqlschool.modeanalytics.com/ 第一部分 学习SQL 本教程是专为那些想用数据回答问题的人们而设计的.从很大程度上讲,SQL是数据分 ...

  7. 学习《SQL必知必会(第4版)》中文PDF+英文PDF+代码++福达BenForta(作者)

    不管是数据分析还是Web程序开发,都会接触到数据库,SQL语法简洁,使用方式灵活,功能强大,已经成为当今程序员不可或缺的技能. 推荐学习<SQL必知必会(第4版)>,内容丰富,文字简洁明快 ...

  8. 确保 PHP 应用程序的安全

    开始之前在本教程中,您将学习如何在自己的 PHP Web 应用程序中添加安全性.本教程假设您至少有一年编写 PHP Web 应用程序的经验,所以这里不涉及 PHP 语言的基本知识(约定或语法).目标是 ...

  9. 安全的PHP代码编写准则(转)

    绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据.在采取措施 ...

随机推荐

  1. Codeforces Round #451 (Div. 2) A. Rounding【分类讨论/易错】

    A. Rounding time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  2. ThinkPHP示例:CURD

    完整的控制器文件: class IndexAction extends Action { // 查询数据 public function index() { $Form = M("Form& ...

  3. Checkbox Text 重影问题的解决的方法

    Checkbox有个属性值 <CheckBox android:id="@+id/cb_reg_agree" style="@style/reg_checkbox_ ...

  4. SourceTree的基本使用-git on mac

    SourceTree的基本使用 学习了:https://www.cnblogs.com/tian-xie/p/6264104.html

  5. Java内存区域与模拟内存区域异常

    我把Java的内存区域画了一张思维导图,以及各区域的主要功能. 模拟Java堆溢出 Java堆用于存储对象实例.仅仅要不断地创建对象而且保证GC ROOTS到对象之间有可达路径避免被回收机制清除.就能 ...

  6. Python 第三方 http 库-Requests 学习

    Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTT ...

  7. C 递归 递归指的是在函数的定义中

    C 递归 递归指的是在函数的定义中使用函数自身的方法. 举个例子:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给 ...

  8. highcharts 绘制图标的JAVASCRIPT 类库 收藏

    官方站点 : http://www.highcharts.com 演示样例网址 : http://www.highcharts.com

  9. Codeforces Round #243 (Div. 2)——Sereja and Table

    看这个问题之前,能够先看看这个论文<一类算法复合的方法>,说白了就是分类讨论,可是这个思想非常重要 题目链接 题意: 首先给出联通块的定义:对于相邻(上下和左右)的同样的数字视为一个联通块 ...

  10. spring 官方文档

    英文 http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/ 翻译(1-6章) http:// ...