1. 树(sql2005以上版本)
--通过子节点查询父节点
WITH
TREE AS(
SELECT * FROM tstructure
WHERE id = 6 -- 要查询的子 id
UNION ALL
SELECT tstructure.* FROM tstructure, TREE
WHERE TREE.parent = tstructure.id
)
SELECT * FROM TREE
--通过父节点查询子节点
WITH TREE AS
(
SELECT t.*, 0 level FROM t_sys_menu t WHERE t.menu_id = 1 -- 要查询的父 id
UNION ALL
SELECT m.*, Tree.level + 1 FROM t_sys_menu m, TREE WHERE m.up_menu_id = TREE.menu_id
)
SELECT * FROM TREE
2. 从结果集更新表
update t_health_gps
set latitude = b.lat, longitude = b.lng
from t_health_gps a ,
(select x.aged_id,
y.community, y.detailed,
z.area_name,z.position,
u.gps_id, u.latitude,u.longitude,
SUBSTRING(z.position, 0, CHARINDEX(',', z.position)) as lng,
SUBSTRING(z.position, CHARINDEX(',', z.position) + 1, LEN(z.position)) as lat
from t_aged x, t_aged_address y, t_area_dict z, t_health_gps u
where x.aged_id = y.aged_id and y.community = z.area_id and u.aged_id = x.aged_id
) as b
where a.gps_id = b.gps_id
3. 注释
EXECUTE sp_addextendedproperty N'MS_Description', '服务商信息表',
N'user', N'dbo', N'table', N't_sp_company', NULL, NULL;
EXECUTE sp_addextendedproperty N'MS_Description', '服务商ID',
N'user', N'dbo', N'table', N't_sp_company', N'COLUMN', N'sp_id';
4. 修改字段
alter table t_member alter column face_url varchar(500);
5. 分页查询
-- sqlserver 2000不支持ROW_NUMBER()
SELECT * FROM t_table as t1 ,
( SELECT TOP 20 ROW_NUMBER() OVER (ORDER BY t1.id DESC) as n, t1.id FROM t_table as t1 ) t2
WHERE t1.id = t2.id and t2.n > 10 ;
-- 通用
SELECT * FROM t_table as t1
WHERE t1.id in
(
SELECT TOP 10 t1.id FROM
(
SELECT TOP 20 t1.id FROM t_table as t1 ORDER BY t1.id DESC
) as t1 ORDER BY t1.id ASC
)
ORDER BY t1.id DESC;
6. 强制清空数据库所有表的数据
-- 强制清空数据库所有表的数据
CREATE PROCEDURE sp_DeleteAllData
AS
-- sp_MSForEachTable !!注意:微软官方文档对此存储过程没有详细描述
-- 禁用约束
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
-- 禁用触发器
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
-- 删除所有表的数据
EXEC sp_MSForEachTable 'DELETE FROM ?'
-- 启用约束
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
-- 启用触发器
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
-- 执行检查, 可省略
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
GO
-- 执行存储过程
EXEC sp_DeleteAllData;
7. 删除所有表
--/第1步**********删除所有表的外键约束*************************/
DECLARE c1 cursor for
select 'alter table ['+ object_name(parent_obj) + '] drop constraint ['+name+']; '
from sysobjects
where xtype = 'F'
open c1
declare @c1 varchar(8000)
fetch next from c1 into @c1
while(@@fetch_status=0)
begin
exec(@c1)
fetch next from c1 into @c1
end
close c1
deallocate c1
--/第2步**********删除所有表*************************/
GO
declare @sql varchar(8000)
while (select count(*) from sysobjects where type='U')>0
begin
SELECT @sql='drop table ' + name
FROM sysobjects
WHERE (type = 'U')
ORDER BY 'drop table ' + name
exec(@sql)
end
8. 表|列|索引-重命名
-- 基本语法:
-- sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ]
--eg:
-- 1. table
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
-- 2. column
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
-- 3. index
GO EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
9. 查找外键信息
-- 外键约束名称, 子表, 子表列, 父表
select fk.name fkname , ftable.name ftablename, cn.name fkcol, rtable.name ftablename from sysforeignkeys
join sysobjects fk
on sysforeignkeys.constid = fk.id
join sysobjects ftable
on sysforeignkeys.fkeyid = ftable.id
join sysobjects rtable
on sysforeignkeys.rkeyid = rtable.id
join syscolumns cn
on sysforeignkeys.fkeyid = cn.id and sysforeignkeys.fkey = cn.colid