我们安装数据库后,系统会默认把数据库文件和数据库日志文件最大设为500MB,当然你中途可以更改这个限制。当日志文件接近最大值时,继续使用数据库会提示:事务日志已满。解决这个问题,有3种方案:
第一种解决方案:在数据库上点击右键 → 选择 属性 → 选择 文件,然后增加数据库日志文件的文件大小。
Just So So ...
我们安装数据库后,系统会默认把数据库文件和数据库日志文件最大设为500MB,当然你中途可以更改这个限制。当日志文件接近最大值时,继续使用数据库会提示:事务日志已满。解决这个问题,有3种方案:
第一种解决方案:在数据库上点击右键 → 选择 属性 → 选择 文件,然后增加数据库日志文件的文件大小。
在SQL Server中,回车符的AASCII码是13,换行符的ASCII码是10,制表符t的ASCII码CHAR(9)
1,回车符
查找有回车符的内容
select id,theme from TableName where charindex(char(13),theme) > 0
清除回车符
update TableName set theme=replace(theme, char(13),'') where 1=1
2,换行符
查找有换行符的内容
select id,theme from TableName where charindex(char(10),theme) > 0
清除换行符
update TableName set theme=replace(theme, char(10),'') where 1=1
3,制表符t
查找有制表符的内容
select id,theme from TableName where charindex(char(9),theme) > 0
清除制表符
update TableName set theme=replace(theme, char(9),'') where 1=1
4,回车换行符
查找有回车换行符的内容
select id,theme from TableName where charindex(char(13) + char(10),theme) > 0
清除回车换行符
update TableName set theme=replace(theme,char(13) + char(10),'') where 1=1
在使用存储过程时,不可避免会遇到:把一个以逗号分隔的数字字符串当成数组一样传给存储过程,如下:
exec proc_FuckMe '6,7,8';
存储过程SQL中想当然地用where id in (@ID)
这种方式去接传过来的值,会报错的!
解决方案如下代码,在存储过程里面添加一个逻辑,把传进来的值处理一下,然后再给SQL使用:
declare @StrArray varchar(100),@split varchar(100) --定义@split分隔符,@StrArray需要转换的类似数字数组的字符串 比如6,7,8
set @StrArray=@ID --从存储过程的形参中获取数据
set @split= ',' --设置分隔符
declare @TempTable table(Row int identity(1,1) not null,TempID int) --在内存中定义一个临时表,临时字段TempID
set @StrArray=@StrArray+@split --最后要加个分隔符,
while(charindex(@split,@StrArray)<>0)
begin
insert @TempTable(TempID) values (substring(@StrArray,1,charindex(@split,@StrArray)-1))
set @StrArray = stuff(@StrArray,1,charindex(@split,@StrArray),'')
end
上面处理完后,后面的SQL使用:
select * from Table where id in (select TempID from @TempTable)
select TempID from @TempTable
通过这个SQL获取到转换后的ID数组结果
最后再强调下:存储过程接收'6,7,8'这种像是数组,实际上是以逗号分隔的数字字符串时,对应的参数要命名为varchar(500),不能再命名为int类型。
SQL Server安装时,默认都安装在C盘,包括数据库文件的默认位置也是C盘,一般路径是C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA
这就有2个问题:
1,随着时间的推移,数据库文件会增多增大,会逐渐占据C盘空间。不过现在的云服务器都能给系统盘C盘扩容,如果不是云服务器呢?扩容还是有很大的风险的。
2,如果系统盘C盘出问题怎么办?被格式化了,被病毒感染了怎么办?维护服务器,首要考虑就是系统被干了,但数据还健在。
一,DROP TABLE tablename
删除内容和定义,释放空间。就是把整个表删除掉,表里的数据以及表结构一起删掉。
二,TRUNCATE TABLE tablename
删除内容、释放空间但不删除定义。
就是把表里所有数据删除,删除后,如果再新增数据,id自增字段又是从“标识种子值”开始,比如从0或者1开始自增。
三,DELETE TABLE tablename
删除内容不删除定义,不释放空间。DELETE
和TRUNCATE
相比,最明显的就是,DELETE
删除了数据,再新增数据时,id会按照之前已有的数据自增,会造成
标识列不连续。
但TRUNCATE
比DELETE
速度快,且使用的系统和事务日志资源少。如果有ROLLBACK
命令,DELETE
将被撤销,而TRUNCATE
则不会被撤销。
所以,如果要删除整个表,只有DROP
可选
如果把整个表里的数据清空,推荐TRUNCATE
如果只是删除表里的有些数据,只有DELETE
可选