代码改变世界

随笔分类 -  sql

sql中exists,not exists的用法

2012-11-05 15:15 by suzh, 535 阅读, 收藏,
摘要: exists : 强调的是是否返回结果集,不要求知道返回什么, 比如: select name from student where sex = 'm' and mark exists(select 1 from grade where ...) ,只要exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段始终为1,如果改成“select2 from grade where ...”,那么返回的字段就是2,这个数字没有意义。所以exists子句不在乎返回什么,而是在乎是不是有结果集返回。而 exists 与 in 最大的区别在于 in引导的子 阅读全文

SQL Server 2005新特性之使用with关键字解决递归父子关系

2012-11-01 13:08 by suzh, 313 阅读, 收藏,
摘要: 1. 引言现实项目中经常遇到需要处理递归父子关系的问题,如果把层次关系分开,放在多个表里通过主外键关系联接,最明显的问题就是扩展起来不方便,对于这种情况,一般我们会创建一个使用自连接的表来存放数据。例如存放会员地区数据表结构可能是这样:列名描述location_id地区编号location_name地区名称parentlocation_id上级地区编号或者某个部分的职员表结构可能如下所示:列名描述employee_id职员编号employee_name职员名称manager_id职员的直接上级管理者,和employee_id进行自联接通过类似表结构,我们就可以通过一个表理论上管理无限级数的父/ 阅读全文

SQLServer : EXEC和sp_executesql的区别

2012-04-25 11:32 by suzh, 220 阅读, 收藏,
摘要: 1,EXEC的使用2,sp_executesql的使用 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能(对于这个我在后面的例子中会详加说明),还可以编写更安全的代码。EXEC在某些情况下会更灵活。除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql.1,EXEC的使用EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批处理。以下 阅读全文

在windows 7 上为 sqlserver 2008 启用远程访问

2012-04-24 12:44 by suzh, 242 阅读, 收藏,
摘要: 在windows 7 上为 sqlserver 2008 启用远程访问,需要两个重点的步骤。第一步:启用sqlserver 2008远程访问的功能。打开Microsoft SQL Server 2008-配置工具-SQL Server 配置管理器启用并激活Tcp/IP然后重启sqlserver服务。这样sqlserver 2008就可以进行远程连接了。但是win7 防火墙默认是阻止了sqlsever 开发的端口,所以接下来我们要更改win7 防火墙的设置.第二步:更改win7 防火墙的设置。进入“控制面板/系统和安全/Windows 防火墙”,选择"高级设置"在入站规则上新 阅读全文

SQL Server中行列转换 Pivot UnPivot

2012-04-21 15:04 by suzh, 307 阅读, 收藏,
摘要: SQL Server中行列转换 Pivot UnPivotPIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P完整语法:table_sourcePIVOT(聚合函数(value_column)FOR pivot_columnIN(<column_list>))UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现完整语法:table_sourceUNPIVOT(value_columnFOR 阅读全文

SQL Server 2008 定时执行sql语句作业的制定

2012-04-11 14:20 by suzh, 6441 阅读, 收藏,
摘要: --SQL Server 2008 定时作业的制定--1.打开【SQL Server Management Studio】,在【对象资源管理器】列表中选择【SQL Server 代理】;--2.鼠标右击【SQL Server 代理】,选择【启动(S)】,如已启动,可以省略此步骤; --3.展开【SQL Server 代理】列表,右击【作业】-->【新建作业】; --3.1 在【常规】选项卡中:-- 输入作业名称,如"My Job";--3.2 在【步骤】选项卡中: --3.2.1 点击【新建】,输入【步骤名称】,如“步骤1”,类型默认T-SQL脚本,也可以选择SSIS 阅读全文

存储过程中执行动态Sql语句

2011-12-15 14:12 by suzh, 463 阅读, 收藏,
摘要: SQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就是利用sp_executesql,能够重用执行计划,这就大大提供了执行性能,还可以编写更安全的代码。EXEC在某些情况下会更灵活。除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql.1.EXEC的使用 EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批处理。以下所讲的都是第二种用法。 下面先使用EXEC演示一个例子,代码1代码Code highlight. 阅读全文

在sql中实现数组

2011-12-12 18:00 by suzh, 9095 阅读, 收藏,
摘要: T-SQL象数组一样处理字符串、分割字符串 在日常的编程过程中,数组是要经常使用到的。在利用SQL对数据库进行操作时,有时就想在SQL使用数组,比如将1,2,3,4,5拆分成数组。可惜的是在T-SQL中不支持数组。不过还是有变通的办法。我们可以自己编写两函数Get_StrArrayLength(取得字符串的长度-元素的个数)和Get_StrArrayStrOfIndex(按指定符号分割字符串,返回分割后指定索引的第几个元素)。有了这两个函数,我们就可以非常方便的在T-SQL中处理形如1,2,3,4,5这样的字符串了。 T-SQL对字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样 阅读全文

(转)关于SQL Server 中合并行的方法

2011-07-16 14:29 by suzh, 732 阅读, 收藏,
摘要: -------------参考----------------------------假设我们有如下数据表------菜系表--------------店名 菜系--------澳门豆捞 川菜 --澳门豆捞 粤菜 --澳门豆捞 闽菜 --为民大酒店 鲁菜 --为民大酒店 粤菜 --为民大酒店 川菜------------------------------执行如下语句select 店名,菜系=STUFF((select ','+ltrim(菜系) from 菜系表 where 店名=t.店名 for XML path('')),1,1,'')fr 阅读全文

group By

2011-04-01 15:02 by suzh, 492 阅读, 收藏,
摘要: 1. Group By 语句简介:Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。P.S. 这里真是体会到了一个好的命名的力量,Group By从字面是直接去理解是非常好理解的。恩,以后在命名的环节一定要加把劲:)。话题扯远了。2. Group By 的使用:上面已经给出了对Group By语句的理解。基于这个理解和SQL Server 2000的联机帮助,下面对Group By语句的各种典型使用进行依次列举说明。2.1 Group By [Express 阅读全文

一个sql server2005还原备份文件的问题

2011-03-10 16:15 by suzh, 264 阅读, 收藏,
摘要: error describe(错误描述):System.Data.SqlClient.SqlError: 未正确配置 BackupDirectory 注册表项。当未提供完整路径名时,此项应指定存储磁盘备份文件的根路径。此路径还用于定位重新启动检查点文件以进行 RESTORE。 (Microsoft.SqlServer.Smo) 差了一下资料 原来是注册表问题 操作:在HKET_local_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1 \MSSQLSERVER下添加以下字符串值:key: BackupDirectory value 阅读全文