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 代码中直接输入的任何数据.在采取措施 ...
随机推荐
- Cryptography I 学习笔记 --- 基于陷门置换的公钥加密
RSA算法的工作流程 1. 生成公钥私钥 生成两个素数p和q,计算n=p*q,计算φ(n)=n-p-q+1,然后生成e与d,使 e * d = 1 mod φ(n). 然后以(n, e)作为公钥,(n ...
- ACM的奇计淫巧_输入挂
什么是输入挂? 众所周知scanf比cin快的多,那么有没有比scanf更快的东西呢?答案就是输入挂,输入挂利用了告诉读取的函数getchar(),然后再人工处理成整数或浮点,比使用scanf快太多. ...
- Loj #6164. 「美团 CodeM 初赛 Round A」数列互质
link : https://loj.ac/problem/6164 莫队傻题,直接容斥做. #include<bits/stdc++.h> #define maxn 100005 #de ...
- BeanFactory和ApplicationContext的异同
相同: Spring提供了两种不同的IOC 容器,一个是BeanFactory,另外一个是ApplicationContext,它们都是Java interface,ApplicationContex ...
- 【转】java8中谨慎使用实数作为HashMap的key!
java8中谨慎使用实数作为HashMap的key! java8中一个hashCode()函数引发的血案java8中一个hashCode()函数引发的血案1.起因2.实数的hashCode()3.总结 ...
- 转:浅析Collections.sort
浅析Collections.sort 问题引入 在之前的一次Java上机实习中,老师布置了一道很简单的题: 从控制台输入10个整数,对它们进行升序排序并输出. 考虑到只有10个数,需要比较的次 ...
- 一种全新的自动调用ajax方法
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- VS2008中编译通过,但调试时出现“未使用调试信息生成二进制文件”的问题
.只要是“建立项目的时候不应建立空项目,而应当建立一个“win32控制台应用程序”.这样确实可以解决问题.只要你选择的是这个"win32控制台应用程序"则在附加选项里面选不选上“空 ...
- Hadoop Mapreduce分区、分组、二次排序过程详解
转载:http://blog.tianya.cn/m/post.jsp?postId=53271442 1.MapReduce中数据流动 (1)最简单的过程: map - reduce (2)定制了 ...
- Mongodb性能调优
摘要 1. Mongodb 适用场景简介 2. Mongodb 性能监控与分析 3. Mongodb 性能优化建议 关于Mongodb的几个大事件 1.根据美国数据库知识大全官网发布的DB热度排行,M ...