sql server 判断表/视图/存储过程是否存在
--如果是实表可以用
if exists (select * from sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[表名]
--如果是临时表可以用(说明,如果用查找实表方法来打临时表会找不到.发布区别对代.)
if object_id('tempdb..##temp') is not null
drop table ##temp
--判断存储过程是否存在
MSSQL2000
view plaincopy to clipboardprint?
if exists(select * from sysobjects where id=object_id('[dbo].[sp_create_storeCount]') and xtype='P')
DROP PROCEDURE [dbo].[sp_create_storeCount]
if exists(select * from sysobjects where id=object_id('[dbo].[sp_create_storeCount]') and xtype='P')
DROP PROCEDURE [dbo].[sp_create_storeCount]
MSSQL2005
view plaincopy to clipboardprint?
IF EXISTS (SELECT * from sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[AccountHz]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[AccountHz]
IF EXISTS (SELECT * from sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[AccountHz]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[AccountHz]
--判断视图是否存在
--SQL Server 2000
IF EXISTS (SELECT * from sysviews WHERE object_id = '[dbo].[视图名]'
--SQL Server 2005
IF EXISTS (SELECT * from sys.views WHERE object_id = '[dbo].[视图名]'
/*
sysObjects (
Name sysname, --object 名称
id int, --object id
xtype char(2), -- object 类型
type char(2), -- Object 类型(与xtype 似乎一模一样? 有点郁闷…)
uid smallint, -- object 所有者的ID
... --其他的字段不常用到。
)
sysobjects的xtype 代表的对象类型。可以是下列对象类型中的一种:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN =
相关文档:
查询速度慢的原因很多,常见如下几种:
1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
2、I/O吞吐量小,形成了瓶颈效应。
3、没有创建计算列导致查询不优化。
4、内存不足
5、网络速度慢
6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) ......
--结合sys.indexes和sys.index_columns,sys.objects,sys.columns查询索引所属的表或视图的信息
select
o.name as 表名,
i.name as 索引名,
c.name as 列名,
i.type_desc as 类型描述,
is_primary_key as 主键约束,
is_unique_constraint as 唯一约束,
is_disable ......
SQL Server的行列转换功能非常实用,但是由于其语法不好懂,使很多初学者都不愿意使用它。下面我就用示例的形式,逐一展现Pivot和UnPivot的魅力。如下图
1.从Wide Table of Months 转换到 Narrow Table的示例
select [Year],[Month],[Sales] from
(
select * from MonthsTable
)p
unpivot
(
[Sales] for ......
SQL Server里的 ISNULL 与 Oracle 中的 NULLIF不同:
SQL Server 中有两个参数,语法:
ISNULL(check_expression, replacement_value)
check_expression 与 replacement_value 数据类型必须一致
如果 check_expression 为 NULL,则返回 replacement_v ......