最近工作又总结出了一些sqlserver的小知识,分享出来,大部分都是平时百度来的,也有些是从帮助文档或其他地方收集来的,这一篇作为上一篇的继篇
10.java事务和存储过程事务冲突的解决方法-事务点
declare @INIT_TC
int
select @INIT_TC=@@TRANCOUNT
set XACT_ABORT ON --设置下面
if @INIT_TC = 0
begin transaction xxxxxxxx
else
save transaction xxxxxxxx
code........
commit transaction
xxxxxxxx
return 0
Error:
rollback transaction
xxxxxxxx
11.分布式查询开游标设置INSENSITIVE
Declare
xxxx INSENSITIVE Cursor For ........
如不设置INSENSITIVE,报远程表不可更新。远程表上的可更新键集驱动游标要求事务具有扫过游标的 REPEATABLE_READ 或 SERIALIZABLE 隔离级别。
远程表上的游标不可更新,游标的敏感性行为定义了对基行(用于建立游标)所做的更新是否对游标可见。敏感性也定义了能否通过游标进行更新。
12.禁用/开启 所有触发器
--禁用所有表所有触发器
exec
sp_msforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL'
--开启所有表所有触发器
exec
sp_msforeachtable 'ALTER TABLE ? ENABLE TRIGGER ALL'
13.禁用/启用 所有约束
--禁用所有外键约束
sp_msforeachtable
"alter table ? nocheck CONSTRAINT all"
--启用所有外键约束
sp_msforeachtable
"alter table ? check constraint all"
14.查看常用对象
--查看所有的触发器
select
a.name as TableName, b.name as TriggerName from sysobjects a,sysobjects b where b.parent_obj=a.id and a.xtype = 'U' and b.xtype = 'Tr'
--查看所有的视图
select name from
sysobjects where type= 'V' and name <> 'syssegments' and name <> 'sysconstraints'
--查看所有的存储过程
select name from
sysobjects where xtype='P'
--查看所有的函数
select name from
sysobjects where xtype='FN'
--查看所有的表
select name from
sysobjects where xtype='U'
--查看所有的外键约束
select name
from sysobjects where xtype='F'
15.查看表的详情
exec
sp_help '表名'
16.--修改数据库的名称
sp_renamedb '旧库名', '新库名'
17.--查看与某一个表相关的视图、存储过程、函数
select a.* from
sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
18.--比较两表是否相等
if (select
checksum_agg(binary_checksum(*)) from 表名1)=(select
checksum_agg(binary_checksum(*)) from 表名2)
select '相等'
else
select '不等'
19.复制表结构
select top 0 * into 新表名 from 旧表名
使用这种方法插入临时表速度非常快
select * into #临时表名 from 表名
20.列出全部当前进程(当前连接数)
EXEC
sp_who
21.sqlserver中的命令行shell
exec master.dbo.xp_cmdshell 'osql -U sa -P 密码 -i c:/脚本.sql -d 库名'