1 、 declare @OverTimeType uniqueidentifier; --定义GUID类型变量
@OverTimeType= isnull(cast(OverTimeType as uniqueidentifier),NULL) --给变量赋值 此时如果最后的NULL 写成‘’ ,就会在 OverTimeType 为空的情况下报错,因为空字符串无法转换成GUID类型 ,而NULL 可以作为GUID类型。
2、 数据库更新一条数据 其实是有个inserted 表 和deleted 表 。update 操作 就是利用这两个表完成的,inserted 表中存的一条记录 除了显式 update 的字段 其他为空 ,而update的操作就是把inserted 表中Update中有的字段和原来的deleted 表中的其余字段拼接成一条记录 插入 。
3、from 后面不能跟表别名 a 只能跟临时表 #table
4、建立索引 :CREATE NONCLUSTERED INDEX [索引名字]
ON [dbo].[表名] ([建立索引的类名])
5、查询某个字段有重复的,以及重复数量
select * from (
SELECT Email,count(*)as a
FROM [CRLG_HR].[dbo].[PUB_Employee] group by Email )as b where b.a>1
6、sql语句运行中输出信息(调试用)
--1.
print '你要输出的信息'
--2.
select '你要输出的信息'
--3.
raiserror('你要输出的信息!',16,1)
7、update中的多条件选择赋值:
UPDATE [表名] SET name= CASE WHEN Id=1 THEN 'a' WHEN Id=2 THEN 'b' end
8、从一个表查询数据插入到新建表中
SELECT * INTO [不存在的表名] from
[原表]
WHERE 条件
7、关于left join 引起行数变多的问题
原来一直以为 left join 后的行数一直和第一张表的行数一样多,后来偶然发现有可能变多,
原因是:后面表的 on join的字段不唯一 有多条纪录 就会导致每条纪录都匹配一次到结果中 。
所以注意可以在join 后distinct一下 有可能会去除多余行,但是当后面表的其他字段不同时 也是去不掉的。