日度归档:2019年10月2日

mssql sqlserver使用join代替in关键字的方法分享


摘要:
下文讲述sqlserver中使用join替换in关键字的方法分享,如下所示:
实验环境:sql server 2008 R2


  ---in 关键字的写法
   SELECT count(1)
     FROM tableNameA a
   WHERE a.keyId  not IN( SELECT keyId
                        FROM tableNameB as b
                        WHERE  b.info ='test'
                     )
  ---转换为join关键字
    SELECT count(1)
      FROM tableNameA a join tableNameB b on a.keyId = b.keyId 
    WHERE  b.info <>'test'


 ---in 关键字写法
    SELECT count(*)
      FROM tableNameA a
    WHERE keyId  IN ( SELECT keyId
                     FROM tableNameB b
                     WHERE b.info ='test'
                    )


---join 关键字转发 
  SELECT count(1)
      FROM tableNameA a join tableNameB b 
            on a.keyId = b.keyId 
     WHERE  b.info ='test'

mssql sqlserver 触发器中Inserted和deleted简介说明


摘要:
下文讲述sqlserver触发器中inserted和deleted对象中的相关说明,如下所示:
实验环境:sql server 2008 R2


inserted和deleted表是触发器中一些特殊的表
—————————–
Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行集合,
当对数据表进行插入或更新操作时,此时整个受影响的数据行都会被存储在inserted表中
—————————–
Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行集合,
当对数据表进行删除或更新操作时,在操作前,数据库引擎会将受影响的数据行–修改前的集合存储在deleted表中。
—————————————————
1.插入操作(Insert)
Inserted表有数据,Deleted表无数据

2.删除操作(Delete)
Inserted表无数据,Deleted表有数据

3.更新操作(Update)
Inserted表有数据(新数据),Deleted表有数据(旧数据)

—————–注意事项:
inserted和deleted数据表中都可能存储多行数据


触发器引用举例

 create trigger tr_test
     on testTable
    for update
  as
   begin 
       
	   ---操作前的数据
	   insert into testTableLog
	   ([列名1],...)
	   select  [列名1],...  from deleted 
	        

		---操作后的数据
	   insert into testTableLog
	   ([列名1],...)
	   select  [列名1],...  from inserted 


   end

mssql sqlserver查看索引大小的3种方法分享


摘要:
下文讲述sqlserver中查看索引大小的三种方法,如下所示:
实验环境:sql server 2008 R2


实现思路:
1.使用系统存储过程“sp_spaceused”查看
2.通过查看系统视图 sys.indexes 获取索引大小

    /*
查看数据表 adminset 
下的索引信息
*/
sp_spaceused 'adminset'

SELECT
  i.name                  AS [索引名称],
  SUM(s.used_page_count) * 8   AS [索引大小KB]
FROM sys.dm_db_partition_stats  AS s 
JOIN sys.indexes                AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
WHERE s.[object_id] = object_id('adminset') 
GROUP BY i.name
ORDER BY i.name

SELECT
    i.name              AS [索引名称],
    SUM(page_count * 8) AS [索引大小KB]
FROM sys.dm_db_index_physical_stats(
    db_id(), object_id('adminset'), NULL, NULL, 'DETAILED') AS s
JOIN sys.indexes AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
GROUP BY i.name
ORDER BY i.name

mssql_sqlserver_获取数据库上索引大小的三种方法

mssql_sqlserver_获取数据库上索引大小的三种方法



注意事项:
 查看整个数据库中的索引大小
1. sp_spaceused 函数后面不输入表名
2.将sys.dm_db_index_physical_stats中的object_id(‘adminset’)替换为NULL
  3.WHERE s.[object_id] = object_id(‘adminset’) 查询条件禁用

相关阅读:
sp_spaceused关键字使用
mssql sqlserver 系统表sys.indexes简介说明
sql server动态存储过程 sys.dm_db_index_physical_stats 功能简介
sqlserver 查询当前数据库下所有表的占用空间的方法分享