随笔分类 - SQL
摘要:http://www.cnblogs.com/xfrog/archive/2010/10/13/1850602.html对于sql的一些认识还停留在几年前,对于一些新的功能目前是真的没有精力去学习和研究。看到好的文章,就自己留一下,以待后查。OK,就像标题呈现的一样,SQL Server 2008中的MERGE语句能做很多事情,它的功能是根据源表对目标表执行插入、更新或删除操作。最典型的应用就是进行两个表的同步。下面通过一个简单示例来演示MERGE语句的使用方法,假设数据库中有两个表Product及ProductNew,我们的任务是将Product的数据同步到ProductNew(当然同步可能
阅读全文
摘要:一、基础1、说明:创建数据库CREATE DATABASE database-name 2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:/mssql7backup/MyNwind_1.dat'--- 开始 备份BACKUP DATABASE pubs TO testBack 4、说明:创建新表create table tabname(col1 type1 [
阅读全文
摘要:还是比较实用的功能,自己也记录一下。转自http://www.cnblogs.com/changbluesky/archive/2010/06/10/1753036.htmlSQL中的叠加(小提示):有如下的需求,用SQL实现把结果集合转换为字符串.如下:可以有至少如下三种方法来做转换:1. 在.NET中通常的做法是先取出结果集放在DataTable中,再利用foreach循环取出每个字段串联起来. 亦如这样,在SQL中也有相同的做法,就是用游标(CURSOR)做循环,示例代码如下:CursorCode highlighting produced by Actipro CodeHighligh
阅读全文
摘要:Sql Server数据库的一大优势,就是具有富UI的管理和调试工具,这点,绝对是优于ORACLE和其他的大中型数据库的。Sql Server的众多工具中,对于开发人员和DBA来讲,非常重要的一个,就是Sql Profiler (事件探查器) 了。Sql Server中执行的每个一个动作,都可以在Sql Profiler里看的一清二楚,这对于性能调优,后期维护等等是非常有帮助的。但是,问题来了,在你的产品发布后,你可能不想让客户跟踪到你的SQL执行情况,便于对客户保密。那么这个优势,就成了你的“眼中钉”如何才能不被Sql Profiler跟踪到呢?下面,我们就来探讨这个问题假设,你有一张表A,
阅读全文
摘要:select sum(rows) from sysindexes where id in(select id from sysobjects where xtype='u') and indid in (0,1) 一个大致的结果,数据相对正确,关键是快速取到.系统表的作用就不解释了
阅读全文
摘要:当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改,如果强行更改会出现以下提示: 不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了“阻止保存要求重新创建表的更改”选项。如果要去掉此提示,打开SQL 2008 在最上面工具-〉选项-〉左侧有个 设计器-〉表设计器和数据库设计器 -> 阻止保存要求重新创建表的更改(右侧) 把钩去重新启动2008即可
阅读全文
摘要:网上有很多SQL SERVER数据库字典的SQL语句,七零八落,我在工作整理了一下思路,总结SQL代码如下。 数据库字典包括表结构(分2K和2005)、索引和主键.外键.约束.视图.函数.存储过程.触发器.规则。可以在企业管理器、查询分析器中简单执行,直接了当的查出SQL2K及SQL2005的所有数据字典,方便文档的编写,希望对大家有帮助。1. SqlServer2000数据库字典--表结构.sqlSELECTTOP100PERCENT--a.id,CASEWHENa.colorder=1THENd.nameELSE''ENDAS表名,CASEWHENa.colorder=1T
阅读全文
摘要:这样一个情况select * from a where c>0 and (b/c)>0.5 and (b/c)<0.6 这样一条语句,由于b,c是二个数值列,里面记录的是金额,而c 的话有可能为0,那么这时我们虽然加上了c>0这个条件,却仍有可能出现 遇到以零作除数错误 这个错误.解决这个问题,有二种方法,一种是自己加个函数 发觉c=0时,将c改成1 ;如 b/checkdata(c)<0.6另一种方式 则是使用sqlserver 的选项来禁止出现以零除的错误中断,让而让其为nullset ansi_warnings offSET ARITHABORT offSE
阅读全文
摘要:最近遇到个问题,头都给搞大了.在Report Service2000中做个报表,其实有一个数据字段是小数(二数除的结果),最后要显示为百分比的.自己取出数据显示出来,一点问题都没有.但是Report 一调用,就会显示出错误的数据了.比如真的数据为0.25,但到报表中却显示为12.5 ,找来找去却找不到原因.google一把,也没遇到这种情况.真的晕了.一次在无意当中却发觉这个问题的解决方式,但来,在SP中数据类型原本定义的是float类型,那就出现上面的现象,数据显示的时候会变,而我将此数据类型改为decimal(18,3)保三位小数,后一切正常了,报表能显示出正确的数据来了.这个问题的原因是
阅读全文
摘要:TSQL中有TOP N的方法用来获取前N条记录,在使用sql report service 中也有这样的需求,按照MS的常识,设置这个应该很简单.在report service 的图表属性的筛选器中的字段如下表达式 运算符 值 与/或那么我们在设置表达式时,只要选择数据源中的某一个字段,再输入我们的过滤条件=Fields!field1.value = 2 and=Fields!field1.value TOp N 5但是这样设置的话,会报 处理报表时出错,无法计算FilterExpression/FilterValues 这样的错.问题出在哪呢.对于这个错的话,其实只在在值这一列设置的时候加一
阅读全文
摘要:在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等。我们通常的做法是:select count(*) as c from tableA 。然而对于记录数巨大的表,上述做法将会非常耗时。在DELL 4400 服务器上做试验,MS Sqlserver 2000 数据库对于100万记录的简单数据表执行上述语句,时间在1分钟以上。如果在表的某个字段上做聚簇索引,第一次执行该语句的时间和没有索引的时间差不多,之后执行上述语句,速度很快,在1秒中以内,但当表的记录数发生较大变化后,再执行该语句又会经历一次耗时的过程。而且不是每个表都适合做聚簇索引的,
阅读全文
摘要:一朋友问及一个问题:在SQL Server2000里如何通过sql语句查出指定数据表中自动编号的字段名,即包含标识的字段名。其实使用一个简单的sql语句就搞定了:Select [name] From sysColumns Where id=object_id(N'TABLENAME') and Status=128其中TABLENAME为你要查询的数据表名称。如果想查询标识种子和标识增量的信息,应使用如下语句:Select [name],autoval From sysColumns Where id=object_id(N'TABLENAME') and St
阅读全文
摘要:select OID ,Pos from (select OID, ROW_NUMBER() OVER (order by OID) as Pos from directoryRights) as T where T.Pos > 1 and T.Pos < 10
阅读全文
摘要:前几天写一个程序时,无意中遇到一个怪问题.症状描述如下:一台联想服务器上安装了SQLSERVER服务,在其一个数据库里写了一个存储过程.此存储过程接受一个参数,里面的语句对参数进行判断然后执行分支.if @CustType=0 ..................else if @CustType=1.......................else...............基本结构是这样.当我在开发的时候,用我的笔记本(康柏)上的程序连上服务器,程序里用的ADO中的Recordset来处理.当执行到rs.open时一点问题也没有.在服务器上也用此程序执行调用存储过程也没有问题,一切正
阅读全文
摘要:/*使用SQL语句来进行分页使用此技术的第一步是将所需页的数量与页大小相乘,然后将结果使用TOP关键字升序排序,再将此查询嵌入另一个查询中.此查询是取页尺寸的大小的记录数。是降序处理这样此查询是返回嵌入查询的最后一页。如果需要,可以将最终查询结果再进行升序处理*/declare @pagesize int --每页显示的记录数declare @Pages int --要显示的页数set @pagesize=3set @pages=2declare @Sql nvarchar(200)set @sql='select top ' +str(@pagesize)+' * f
阅读全文
摘要:在SQLSERVER中创建 OLE 对象实例,有时我们想到数据库中执行存储过程的时候,同时调用系统中的COM对象。此时我们可以采用SQL的系统存储过程sp_OACreate ,此存储过程的调用要有一定的权限,只有 sysadmin 固定服务器角色的成员才能执行 sp_OACreate。语法sp_OACreate progid, | clsid, objecttoken OUTPUT [ , context ] 参数progid是要创建的 OLE 对象的程序标识符 (ProgID)。此字符串描述该 OLE 对象的类,其形式如下:'OLEComponent.Object'OLECo
阅读全文
摘要:Randomly Sorting Query Results 查询结果随机排序 Q. How can I randomly sort query results?问:怎样才能对查询结果随机排序?A. To randomly order rows, or to return x number of randomly chosen rows, you can use the RAND function inside the SELECT statement. But the RAND function is resolved only once for the entire query, so e
阅读全文
摘要:在我们做代码生成器的时候通常想将字段的描述作为对象的属性描述来处理。如果来取得字段的描述呢。其实我们可以使用SQL SERVER内部函数实现SELECT *FROM ::fn_listextendedproperty (NULL, 'user', 'dbo', 'table', '表名', 'column', default)请在查询分析器中执行,其中的“表名”是数据库的表名
阅读全文
摘要:1、使用OUTPUT类型参数的存储过程的技巧 一般的存储过程都是直接返回一段记录集给调用者,但是有的时候我们只需要一些存储过程返回的一些参数的值,这时候 可以指定存储过程的OUTPUT参数,比如: Create procedure GetName @uid nvarchar(1), @usernam nvarchar(10)='' output AS set @username='hongchao' GO 在上面的存储过程当中我们传递进的参数是@uid,而参数@username则在调有的时候不需要传递进去。 这样,存储过程会返回给我们参数@username的值是‘...
阅读全文
浙公网安备 33010602011771号