SQL 经验总结
总结日常工作中使用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 经验总结的更多相关文章
- Mysql之SQL经验基础积累
1.根据create_time排序,如何确保null值的排在最前面: 解决办法: ,), a.create_time DESC 结果如下图:
- [转][Dapper]SQL 经验集
condition.Append(" AND ChineseName like @name"); p.Add("@name", "%" + ...
- SQL server经典电子书、工具和视频教程汇总
SQL server经典电子书.工具和视频教程汇总 SQL server经典电子书.工具和视频教程汇总 SQL Server是高校计算机专业的一门必修课程,同时众多企业采用SQL Server作为数据 ...
- php过滤提交数据 防止sql注入攻击
规则 1:绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据. ...
- 前端要革命?看我在js里写SQL
在日新月异的前端领域中,前端工程师能做的事情越来越多,自从nodejs出现后,前端越来越有革了传统后端命的趋势,本文就再补一刀,详细解读如何在js代码中执行标准的SQL语句 为什么要在js里写SQL? ...
- 欢迎来到SQL学院
给学习SQL的同学的福利@ http://sqlschool.modeanalytics.com/ 第一部分 学习SQL 本教程是专为那些想用数据回答问题的人们而设计的.从很大程度上讲,SQL是数据分 ...
- 学习《SQL必知必会(第4版)》中文PDF+英文PDF+代码++福达BenForta(作者)
不管是数据分析还是Web程序开发,都会接触到数据库,SQL语法简洁,使用方式灵活,功能强大,已经成为当今程序员不可或缺的技能. 推荐学习<SQL必知必会(第4版)>,内容丰富,文字简洁明快 ...
- 确保 PHP 应用程序的安全
开始之前在本教程中,您将学习如何在自己的 PHP Web 应用程序中添加安全性.本教程假设您至少有一年编写 PHP Web 应用程序的经验,所以这里不涉及 PHP 语言的基本知识(约定或语法).目标是 ...
- 安全的PHP代码编写准则(转)
绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据.在采取措施 ...
随机推荐
- visual studio 插件 resharper 使用指南
vs虽然号称是宇宙第一ide,但在智能提示和代码分析方面还是要略逊于jetbrains系列的ide.如果将jetbrains系列ide的智能提示和代码分析集成到vs中,对vs来说无异于如虎添翼.res ...
- Android 日期对话框DatePickerDialog
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@ ...
- LeakCanary: 让内存泄露无所遁形
LeakCanary: 让内存泄露无所遁形 09 May 2015 本文为LeakCanary: Detect all memory leaks!的翻译.原文在: https://corner.squ ...
- C#里判断字符串是否为纯数字
c bool IsNumeric(string str) //接收一个string类型的参数,保存到str里 { if (str == null || str.Length == 0) //验证这个参 ...
- 在程序中使用NV 3D Vision 【转】
http://www.cnblogs.com/gongminmin/archive/2010/11/21/1883392.html 多年前NVIDIA就发布了3D Vision技术,能提供多种立体渲染 ...
- 微信开发token验证失败
遇到token验证时: 1.首先检验是否是80端口或443端口,能否接收到微信的响应信息,如果使用域名,域名要备注,否则接收不到响应信息: 2.其次判断是否能正常echo $echoStr,之前不能有 ...
- SVG图片背景透明
今天在调整网页的时候,将logo以原有直接贴代码形式,改为加载文件. 其实真正的目的是做SEO.上次SEO交流后得出 结论:核心在于内容的本身的优化.信噪比很重要.也就是有效信息需要占文章的主要内容, ...
- Linux系统内核性能调优
做过Linux平台性能测试的童鞋平时可能会遇到如下问题: 1. TCP端口号不够用导致并发上不去(即与服务器端建立新连接失败) 2. TIME_WAIT状态连接过多导致应用服务器(Nginx.Hapr ...
- quartz 应用到 spring定时任务 执行两次
https://my.oschina.net/superkangning/blog/467487
- php创建无限极目录代码
php创建无限极目录代码 <?php //无限级目录 function dirs($path,$mode=0777){ if(is_dir($path)){ echo '目录已经存在!'; }e ...