转自:http://www.maomao365.com/?p=6873

摘要:

转自:http://www.maomao365.com/?p=6965  

摘要:

转自: http://www.maomao365.com/?p=6208  

摘要:
下文通过案例分析in 关键字在值为null的应用举例,
分析出not in关键字在null值产生的异常信息
如下所示:

下文通过举例的方式讲述sqlserver中位运算的相关知识,如下所示:
实验环境:sqlserver 2008 R2

摘要:

下文将分享三种将字段中null值替换为指定值的方法分享,如下所示:
实验环境:sqlserver 2008 R2

摘要:
GROUPING 用于区分列是否由 ROLLUP、CUBE
或 GROUPING SETS 聚合而产生的行

如果是原生态的行聚合,则返回0
,新增的行数据就返回1

CREATE TABLE testA(keyId INT)
CREATE TABLE testB(keyId INT)
GO
INSERT INTO testA(keyId) VALUES (1)
INSERT INTO testA(keyId) VALUES (2)
INSERT INTO testA(keyId) VALUES (3)
GO
INSERT INTO testB(keyId) VALUES (1)
INSERT INTO testB(keyId) VALUES (2)
INSERT INTO testB(keyId) VALUES (4)
INSERT INTO testB(keyId) VALUES (NULL)
GO
 SELECT * FROM testA WHERE keyId IN (SELECT keyId FROM testB)
-----输出------
/*
keyId
1
2
*/
 SELECT * FROM testA WHERE keyId not IN (SELECT keyId FROM testB)
------无输出记录-----
/*
keyId
*/
INSERT INTO testA VALUES (NULL) ---在testA表中插入空值
SELECT * FROM testA WHERE EXISTS(
    SELECT null  FROM testB WHERE testA.keyId=testB.keyId    
)
----输出----
/*
keyId
1
2
*/
SELECT * FROM testA WHERE not  EXISTS(
    SELECT null  FROM testB WHERE testA.keyId=testB.keyId    
)
/*
keyId
3
NULL
*/
SELECT * FROM testA WHERE testA.keyId NOT in (
    SELECT testB.keyId FROM testB WHERE testB.keyId IS NOT NULL    
)

drop table testA
drop table testB

下文将分享两种将字段中null值替换为指定值的方法分享,如下所示:
实验环境:sqlserver 2008 R2

create table test(keyId int identity, info varchar(30))
   go
   insert into test(info)values('a'),('b'),(null),('d')
   go 
   ---方法1:使用isnull替换
   select keyId,isnull(info,'替换null值')  as info from test 
   go 
   ---方法2:使用case when 替换
   select keyId,case  when info is null then '替换null值' else info  end as info  from test 
  ---方法3:使用coalesce替换相应的值
    select keyId , coalesce(info,'替换null值') as info from test 

   go 
   truncate table test 
   drop table test 

 

 


原文地址:http://www.maomao365.com/?p=6965

grouping 语法简介 :
GROUPING (<列名>)
参数列名:

返回值
tinyint
<hr />
grouping 应用举例:
 

通过以上测试,我们可以看出not in
查询关键字如果子表中存在空值,则无法查询出任何记录,会导致异常产生,

需使用not
exists获取相应的空值信息

在sqlserver的权限设置,我们通常使用1、2、4、8、16、32、64、128等数值分别表示相关信息的某一状态供业务状态使用,通过字段值之间的组合形成一个状态值存储到数据库中,
设置一个角色拥有的权限
例:
1:代表“查看”按钮权限
2:代表”修改”按钮
4:代表”导出”按钮
8:代表”删除”按钮

例: 

create table test(info varchar(30))
go
insert into test (info)values('a'),
('b'),('a'),('c'),('d'),('d') 
go

select info,count_big(info),grouping(info)
from test group by info 
WITH ROLLUP

go
drop table test 
----输出----
ifno 无列名 无列名
a    2    0
b    1    0
c    1    0
d    2    0
NULL    6    1
--例:
--权限表如下:
create table userRole(userId varchar(36),
roleInfo int);
go

insert into userRole(userId,roleInfo)values('test',1) ---初始化测试账号"test",拥有查看权限
insert into userRole(userId,roleInfo)values('猫猫',2) 
--当我们需要给用户加入修改"2"权限,则可以使用以下运算
update userRole set roleInfo =roleInfo|2 where userId ='test'


--当我们需要给用户加入导出"4"权限,则可以继续使用以下运算
update userRole set roleInfo =roleInfo|4 where userId ='test'


--当我们需要给用户删除导出"4"权限,则可以继续使用以下运算
--删除权限前需判断用户是否存在此权限,此脚本不可多次运行
--if exists (select null from userRole where roleInfo &4 =4 and userId ='test')
---begin
update userRole set roleInfo =roleInfo^4 where userId ='test' and roleInfo&4 =4 
--end
---我们检索所有拥有权限"修改2"的用户信息
select * from userRole where roleInfo &2 = 2

go
truncate table userRole
drop table userRole
create table test(keyId int identity, info varchar(30))
go
insert into test(info)values('a'),('b'),(null),('d')
go 
---方法1:使用isnull替换
select keyId,isnull(info,'替换null值') as info from test 
go 
---方法2:使用case when 替换
select keyId,case when info is null then '替换null值' else info end as info from test 
---方法3:使用coalesce替换相应的值
select keyId , coalesce(info,'替换null值') as info from test 

go 
truncate table test 
drop table test  

 

 

 

注意事项:

此处权限设置,主要使用二进制中每一位代表一个权限及位运算的特性进行权限的增减操作
由于”^异或运算”运算,左表达式1或0 时
右表达式为1时,将分别产生
0、1,所以剔除权限时,一定要判断是否存在此权限

 转自:http://www.maomao365.com/?p=7137

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图