用 Transact-SQL 语句监视
SQL Server 提供一些 Transact-SQL 语句和系统存储过程,用于对 SQL Server 实例进行特殊监视。当想要快速查看有关服务器性能和活动的信息时,可以使用这些语句。 [@more@]1. 查看当前的锁语法sp_lock [[@spid1 =] 'spid1'] [,[@spid2 =] 'spid2']参数[@spid1 =] 'spid1'是来自 master.dbo.sysprocesses 的 Microsoft® SQL Server™ 进程 ID 号。spid1 的数据类型为 int,默认值为 NULL。执行 sp_who 可获取有关该锁的进程信息。如果没有指定 spid1,则显示所有锁的信息。[@spid2 =] 'spid2'是用于检查锁信息的另一个 SQL S
SQL SERVER日期格式与多国语言问题
数据库language不同,sql server对日期格式的选择也不同。[@more@]数字日期格式Microsoft® SQL Server™ 2000 允许用指定的数字月份指定日期数据。例如,5/20/97 表示 1997 年 5 月的第 20 天,当使用数字日期格式时,在字符串中以斜杠(/)、连字符(-)或句号(.)作为分隔符来指定月、日、年。字符串必须以下面的形式出现:数字 分隔符 数字 分隔符 数字 [时间] [时间]下面的数字日期格式是有效的:[0]4/15/[19]96 -- (mdy)[0]4-15-[19]96 -- (mdy)[0]4.15.[19]96 -- (mdy)[04]/[19]96/15 -- (myd) 15/[0]4/[19]96 -- (dmy)15
几个实用SQL Server取存储过程
查询数据库对象信息的,比较实用。[@more@]-- ======================================================--列出SQL SERVER 所有表,字段名,主键,类型,长度,小数位数等信息--在查询分析器里运行即可,可以生成一个表,导出到EXCEL中-- ======================================================SELECT (case when a.colorder=1 then d.name else '' end)表名, a.colorder 字段序号, a.name 字段名, (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识, (case when (SELE
ASP数据分页方法
我观前辈的帖子,皆由于数据库的SQL大不一致,且SQL SERVER,ACCESS等菜鸟级数据库没有如rowid,_n_,obs等之类的辅助列,空有BETWEEN运算符而无用武之地,又无如except之类的数据集运算符,真是令无数英雄尽折腰 偶详观各数据库SQL,得出是数据库就有取前面N条记录的SQL语法,如什么select top n*****之类的语法,而数据分页的关键问题是取后N条记录的语法偶深思良久,最后小悟,故出此言,还忘前辈们多多指点[@more@] 取记录集后N条记录的大法: 假设: 1.有一sql语句将产生1000条记录 (select 唯一ID,其他字段 from
小写转大写金额存储过程[SQL SERVER]
小写转大写金额存储过程[SQL SERVER][@more@]CREATE PROCEDURE dbo.L2U (@n_LowerMoney numeric(15,2),@v_TransType int,@RET VARCHAR(200) output) AS Declare @v_LowerStr VARCHAR(200) -- 小写金额 Declare @v_UppERPart VARCHAR(200) Declare @v_UpperStr VARCHAR(200) -- 大写金额Declare @i_I intset nocount onselect @v_LowerStr = LTRIM(RTRIM(STR(@n_LowerMoney,20,2))) --四舍五入为指定的精度并删除数据左右空格select @i_I = 1select @v_UpperStr = 'while ( @i_I <= len(@v_LowerStr))begin select @v_UppERPart
sql server死锁的问题
常看到死锁的问题,一般都是KILL进程,但如果不查出引起死锁的原因,死锁会时常发生 可以通过查找引起死锁的的操作,就可以方便的解决死锁,现将日常解决问题的方法总结。[@more@]1死锁发生时,通过如下语法,查询出引起死锁的操作 use master go declare @spid int,@bl int DECLARE s_cur CURSOR FOR select 0 ,blocked from (select * from sysprocesses where blocked>0 ) a where not exists(select * from (select * from sysprocesses where blocked>0 ) b where a.blocked=spid) union select spid,blocked from sysprocesses
SQL Server2000的补丁版本检查办法
SQL Server的补丁版本检查办法:[@more@]1、用Isql或者SQL查询分析器登录到SQL Server,如果是用Isql,请在cmd窗口输入isql -U sa,然后输入密码,进入;2、如果是用SQL查询分析器,请从程序中启动,输入sa和密码(也可以用windows验证)。2、输入:Select @@Version;go其实如果不想输入,只要打开帮助的关于就可以了这时会返回SQL的版本信息,如下:Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service P
利用IDENTITY()函数重新为列生成序列
假设有个表table_tmp(id, name, info),其数据中id值随有一定顺序但并不是按序列排列,现在想让其id列按序列重新生成。可以使用以下办法:[@more@]1、select IDENTITY(int, 1, 1) as id, name, info into my_table from table_tmp 使用IDENTITY()函数为id生成从1开始的序列,并且把数据插入到新表my_table中。2、truncate table table_tmp or delete from table_tmp 删除掉原表数据3、select * into table_tmp from my_table 把新数据添加回原表,如果原表的id是
唯一性约束和唯一性索引的区别
“唯一性约束”和“唯一性索引”是不同的。一、 建立唯一性约束的语法,使用create table或者alter table1. 在字段级约束定义-- 命名create table tmp_table( a int constraint pk_tmp_table_a primary key, b varchar(10) constraint uq_tmp_table_b unique )-- 不命名create table tmp_table( a int primary key, b varchar(10) unique)2. 在表约束定义-- 命名create table tmp_table( a int, b varchar(10), constraint pk_tmp_table_a primary key(a), constraint uq_tmp_table_b unique(b A
SQL Server 2000的安全策略(二)
8、以最低权限帐户身份进行开发 通常情况下,保护开发服务器安全的最佳方法,就好似它正在生产环境中运行那样对它进行保护。您离这个目标越接近,那么就可以越自信于您开发的代码可以在一个安全的生产环境中正常运行。 在开发过程中,大家都着迷于使用具有 sysadmin 或 dbo SQL Server 权限的帐户,直到部署之前才转换为一个权限更低的帐户。使用这种方法存在着一个问题:将设计人员的权限集还原为最低的所需权限集与在开发应用程序过程中编写这些权限集相比,前者要困难得多。 &
SQL Server 2000的安全策略(一)
数据库是电子商务、金融以及ERP系统的基础,通常都保存着重要的商业伙伴和客户信息。大多数企业、组织以及政府部门的电子数据都保存在各种数据库中,他们用这些数据库保存一些个人资料,比如员工薪水、个人资料等等。数据库服务器还掌握着敏感的金融数据,包括交易记录、商业事务和帐号数据,战略上的或者专业的信息,比如专利和工程数据,甚至市场计划等等应该保护起来防止竞争者和其他非法者获取的资料。数据完整性和合法存取会受到很多方面的安全威胁,包括密码策略、系统后门、数据库操作以及本身的安全方案。但是数据库通常没有象操作
查询分析器不能单步调试的的原因及解决方法
具体步骤如下: 1、将服务器【身份验证】属性设置成【混合模式】(window与sql身份验证) 2、在【控制面板】中打开【服务】将【MSSQLSERVER】服务打开【属性】,选择【登录】页面,将登录身份设置成服务器本地帐号和该帐号密码,如administrator,密码123; 3、重新启动sqlserver服务,此时的服务指的是【SQL服务管理器】中的SQL SERVER服务; 假设【帐号】设置为administrator 此时达到的效果是:服务器本地帐号administrator与客户端上的administrator(并且该帐号的密码要与服务器密码相同)可以通过【查询分析器】进行调试; 如果想让
@@IDENTITY、SCOPE_IDENTITY()和IDENT_CURRENT()的辨析
相同点:它们都返回插入到IDENTITY列中的值不同点:A. @@IDENTITY不受作用域(存储过程、触发器、函数或批处理)的限制。返回最后一个插入的IDENTITY值。如果在程序中不同的作用域插入的表不同,那么返回最后一个表插入的IDENTITY值。例如:作用域A(存储过程)在表T1上插入IDENTITY列,而T1上的触发器会在T2上插入IDENTITY列。则用@@IDENTITY返回T2上插入的IDENTITY值。B. SCOPE_IDENTITY()受作用域的限制,只返回当前作用域中的最后一个IDENTITY值。上例中,如果在存储过程
MS SQL锁机制
锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏读A用户修改了数据,随后B用户又读出该数据,但A用户因为某些原因取消了对数据的修改,数据恢复原值,此时B得到的数据就与数据库内的数据产生了不一致 不可重复读A用户读取数据,随后B用户读出该数据并修改,此时A用户再读取数据时发现前后两次的值不一致 并发控制的主要方法是封锁,锁就是在一段时间内禁止用户做某些操作以避免产生数据不一致
关于外联接(Outer Join)及其他
一 使用外联接以前在Oracle中用=(+)和(+)=来进行左外联接和右外联接;后来用SQL Server时用*=和=*进行外连接左外联接和右外联接;现在决定用SQL-92的标准方法:[OUTER] JOINOUTER是可以省略的。LEFT OUTER JOIN 或 LEFT JOIN 表示左外联接 RIGHT OUTER JOIN 或 RIGHT JOIN 表示左外联接 FULL OUTER JOIN 或 FULL JOIN 表示左外联接外联接的意思不用多说,我们都懂,但是JOIN到底怎么用呢?没有找到很好的资料,只能从例子中学习了:1、
SQL Server不可以增加非空列
ALTER TABLE only allows columns to be added that can contain nulls or have a DEFAULT definition specified. ALTER TABLE 只允许添加可包含空值或指定了 DEFAULT 定义的列。如果:IF EXISTS(SELECT 1 FROM SYSOBJECTS WHERE NAME = N'tab_test') AND NOT EXISTS(SELECT 1 FROM SYSOBJECTS A, SYSCOLUMNS B WHERE B.ID = A.ID AND B.NAME = N'col_test' and a.name = N'tab_test') alter table tab_test add col_test smallint NOT NULLGO将会收到错误信息。要增加非空列怎么办呢?第1种办法:在add column时指定列有defaultalter tab
通用自动为某表某字段生成拷贝名称的存储过程
当在表tab(id, name...)中生成一条新纪录,其他字段都与原纪录一致,但name字段必须按name, Copy of name, Copy (2) of name, Copy (3) of name的规律变化,用下面的SP可以轻松达到此目的。它是通用的,可以针对任何表的varchar(char)类型的字段,生成新名称。-- SP_generate_copy_object_name-- ============================================-- Procedure Name : SP_generate_copy_object_name-- Function : generate a object name that is copied-- Failure return : ''-- Success return : the new object name---- Para
外键技术
一、语法FOREIGN KEY 约束主要目的是控制存储在外键表中的数据,但它还可以控制对主键表中数据的修改。FOREIGN KEY 约束并不仅仅只可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束不允许空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过 FOREIGN KEY 约束的校验。FOREIGN KEY 可以引用同一表中的其它列(自引用)。一个表最多可包含 253 个 FOREIGN KEY 约束。每个表在其 FOREIGN KEY 约束中最多可以引用 253 个不同的表。列级 FOREIGN KEY 约束放在列说明部分,表级
SQL SERVER字符集的研究
一、 试验归类测试SQL:------------------------------------------------------------drop table acreate table a(a varchar(2))insert into a values('a')insert into a values(N'a')insert into a values('深圳')insert into a values(N'深圳')select a, len(a), datalength(a) from adrop table #acreate table a(a varchar(2))insert into #a values('a')insert into #a values(N'a')insert into #a values('深圳')insert into #a values(N'深圳')select a, len(a), datalength(a) from #a-----------------------------------------
修复identity 类型字段数据的跳跃(转)
修复identity 类型字段数据的跳跃(译) 内容提要 1、引言 2、dbcc object_atts 3、下载'sp_identity' 存储过程 4、使用sp_identity显示使用identity 类型字段的表 5 使用sp_identity显示当前表的 identity 数字 6、使用sp_identity 修改表的 identity数字 1引言 在sybase 中,有一个使用未公开的dbcc 命令 ,即 dbcc object_atts 快速修复identity 跳跃的方法,因为 dbcc object_atts 比较难于使用,而存储过程 sp_identity 更容易完成你的问题 警告:本文的方法没有出现在sybase 发布的文档中,并且没有被 sybase 支持,使用与否取决定你