场景一:插入数据的时候报错
当 IDENTITY_INSERT 设置为 OFF 时,不能为表 ‘kfc_serial_number’ 中的标识列插入显式值。 (544)
解决:
set identity_insert kfc_serial_number ON
–设置语法:

SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }
允许将显式值插入表的标识列中

这里稍微注意下,
设置为ON的时候,意思是,你写insert语句的时候,可以自己设置主键值,进行插入操作。
设置为OFF的时候,意思是,不允许手动写主键值进行插入,sqlserver数据库会给我们生成主键值。

场景二:登录方式及账号创建
登录方式一般有两种,一个是Windows验证方式,一个是sqlserver验证方式。
其中,Windows验证方式无需账号密码,直接登录。
sqlserver验证方式,需要账号密码及账号权限。
sa账号是超级管理员账号,类似于mysql的root账号。

一般我们是这么操作的,就是自己安装了sqlserver的时候,我们大多数采用Windows方式登录,于是,就忘记了sa的账号密码,
首先用Windows方式登录sqlserver,登录后,修改sa的密码。
https://www.51zxw/list.aspx?cid=492 这个地址有视频教程。

我们在修改sa密码的时候可能出现的问题

标题: Microsoft SQL Server Management Studio
------------------------------

更改 对于 登录“sa”失败。  (Microsoft.SqlServer.Smo)

有关帮助信息,请单击: http://go.microsoft/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.1600.1+((KJ_RTM).100402-1539+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=更改+Login&LinkId=20476

------------------------------
其他信息:

执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)

------------------------------

无法对 登录名 'sa' 执行 更改,因为它不存在,或者您没有所需的权限。 (Microsoft SQL Server,错误: 15151)

有关帮助信息,请单击: http://go.microsoft/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.00.1600&EvtSrc=MSSQLServer&EvtID=15151&LinkId=20476

------------------------------
按钮:

确定
------------------------------

解决办法:我们再选择Windows验证方式登录时,服务器名称一定要写localhost或者127.0.0.1,否则都算是远程

设置好sa后,我们就可以用sa登录了。

接下来,讲解如何创建我们自己的账号用户。
有一个挺好用的sqlserver客户端 Navicat for sqlserver。
用sa登录后

我们点击新建登录


点击左上角的保存按钮,即可创建账号了。

场景三:修改表的常用语句
新增加表字段:(注意,sqlserver添加表字段和注释必须分两步,和mysql不同)

ALTER TABLE kfc_cs_logs ADD store_code VARCHAR(255);

新增字段注释:

execute sp_addextendedproperty  'MS_Description','保存推送到OC系统的结果','user','dbo','table','xxx_order','column','xxx_order';

execute sp_addextendedproperty  'MS_Description','保存短信发送结果','user','dbo','table','xxx_order','column','xxx_result';

–为字段添加注释
–格式如右:execute sp_addextendedproperty ‘MS_Description’,‘字段备注信息’,‘user’,‘dbo’,‘table’,‘字段所属的表名’,‘column’,‘添加注释的字段名’;
execute sp_addextendedproperty ‘MS_Description’,‘add by liyc. 诊断类别码’,‘user’,‘dbo’,‘table’,‘DiagRecord’,‘column’,‘DiagTypeCode’;

–修改字段注释
execute sp_updateextendedproperty ‘MS_Description’,‘add by liyc.’,‘user’,‘dbo’,‘table’,‘DiagRecord’,‘column’,‘DiagTypeCode’;

–删除字段注释
execute sp_dropextendedproperty ‘MS_Description’,‘user’,‘dbo’,‘table’,‘DiagRecord’,‘column’,‘DiagTypeCode’;

– 添加表注释
execute sp_addextendedproperty ‘MS_Description’,‘诊断记录文件’,‘user’,‘dbo’,‘table’,‘DiagRecord’,null,null;

– 修改表注释
execute sp_updateextendedproperty ‘MS_Description’,‘诊断记录文件1’,‘user’,‘dbo’,‘table’,‘DiagRecord’,null,null;

– 删除表注释
execute sp_dropextendedproperty ‘MS_Description’,‘user’,‘dbo’,‘table’,‘DiagRecord’,null,null;

– 说明:
– 1.增加、修改、删除注释调用不同的存储过程
– 2.增加、修改注释调用的存储过程参数数量和含义相同,删除备注比前两者少了一个“备注内容”的参数
– 3.为表添加注释相比于为字段添加注释,最后两个参数为null

场景四:给表主键添加主键自增
注意,sqlserver必须先删除主键字段才可以添加主键自增。
在执行删除id语句时候,可能报错,要先手动去除该字段的主键属性,然后,才可以删除。
ALTER TABLE kfc_log DROP COLUMN id;
ALTER TABLE kfc_log ADD id INT IDENTITY (1, 1);

场景五:设置字段的默认值为系统当前时间

场景六:一次插入多条数据

INSERT INTO [kfc_cs_logs] ( [uuid], [client_to_server], [server_to_client], [interaction], [create_time], [store_code] )
VALUES
	( '15635316933787324652133333', N'', N'', 'x', '2019-07-21 02:21:35.037', 'aaa' ),
	( '15635316933787324652211111', N'', N'', 'y', '2019-07-22 02:21:35.037', 'bbb' ),
	( '15635316933787324652322222', N'', N'', 'z', '2019-07-23 02:21:35.037', 'ccc' );

对应的mybatis操作:

  <insert id="addHistoryMaded" parameterType="java.util.List" >
        INSERT INTO [kfc_history_maded] (  [today_maded], [today_discard], [cleaning_time] ) VALUES
        <!--item就是List里每一项的对象名,要用","分割每一条数据,最后要";"结尾-->
        <foreach collection="list" item="history" separator="," close=";">
            (#{history.today_maded},#{history.today_discard},#{history.cleaning_time})
        </foreach>
    </insert>

场景七:sqlserver处理时间
https://blog.csdn/sunsloth/article/details/80913753

场景八:md5加密

select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','123456')),3,32);

场景九:sqlserver实现纵向数据横向展示的效果
http://m.myexception/sql-server/588520.html 参考这个
实例代码(两种方式):

----在用语句
select [1],[2],[3],[4],[5] from (
SELECT dt.reason,sum(dt.[count]) as 'count' FROM kfc_discard_detail dt WHERE dt.store_code='SHA121' and dt.cleaning_time='2019-07-22' GROUP BY dt.reason
) AS SourceTable PIVOT (SUM(SourceTable.[count]) FOR SourceTable.[reason] IN ([1],[2],[3],[4],[5])) AS  PivotTable;




SELECT dt.reason,sum(dt.[count]) as 'count' FROM kfc_discard_detail dt WHERE dt.store_code='SHA121' and dt.cleaning_time='2019-07-22' GROUP BY dt.reason;

---- 优化后的语句  这里用max和sum都可以
select
   sum(case reason when '1' then [count] else 0 end) as aaa,
	 max(case reason when '2' then [count] else 0 end) as bbb,
	 max(case reason when '3' then [count] else 0 end) as ccc,
	 max(case reason when '4' then [count] else 0 end) as ddd,
   max(case reason when '5' then [count] else 0 end) as eee
from
   (SELECT dt.reason reason,sum(dt.[count]) as 'count' FROM kfc_discard_detail dt WHERE dt.store_code='SHA121' and dt.cleaning_time='2019-07-22' GROUP BY dt.reason) tb

更多推荐

sqlserver 数据库学习