SQL Server手工插入标识列

发布于:
Script

如果我们在标识列中插入值,例如: 、

insert member(id,username) values(10,'admin')

则在查询分析器里面会返回错误信息:

引用内容   
服务器: 消息 544,级别 16,状态 1,行 1   
当 IDENTITY_Insert 设置为 OFF 时,不能向表 'member' 中的标识列插入显式值。

有的情况我们需要手动插入标识列的值,例如删除了一些记录后,标识列并不连续,而我们又想把它补齐。我们利用一个开关可以让愿望变成现实:

SET IDENTITY_Insert [TableName] ON

在查询分析器里面这样写:

SET IDENTITY_Insert member ON   
insert member(id,username) values(1,'admin')   
SET IDENTITY_Insert member OFF

在SQL Server中完美压缩.mdf文件

发布于:
服务器技术

大家都用过企业管理器中的–“收缩数据库”,里面的功能的确可以收缩数据库的日志文件(.ldf)和数据文件(.mdf),但都会发现同样的问题,在收缩“数据文件”(.mdf)时根本收缩不了多少。最多截段自动增长部份的,没有根本释放在日常操作中删除数据库的沉冗空间。

上述应该是很多人遇到过的,笔者也千试万试试出来的方法,为了确定您的数据库安全,在执行下例的操作前,请先备份你的数据库。

1.首先你要找到你的数据库最大的表,一般是数目最大的表,如果不清楚,请在查询分析器查询:

DBCC SHOWCONTIG

接着用 sp_spaceused 表 来查询reserved 的值和 data 的值 的差异可看来此表比较沉冗。

2.复制你的转移旧表的数据到新表;

SELECT * INTO 新表 FROM 旧表

(如果你数据比较多,可能你会看到待压缩的数据库对应的mdf和ldf文件大小在猛增,没事在复制表)

注:此命令不能把数据库结结构完全复制,需要您重新把旧表与新表对应的主键,自动增长值,索引,默认值等修改。

3.更新一下;

DBCC UPDATEUSAGE (0)

4.把旧表删除,然后把新表的名字改成旧表的名字,这些可以到企业管理器里操作(注意重命名名时的提示);

5.收缩mdf文件,也是最想要实现的一步;

DBCC SHRINKDATABASE(‘库名’)

DBCC shrinkfile(2,0)

DBCC UPDATEUSAGE (0)

/*

2 -> 要收缩的文件的fileid,对应sysfiles中的fileid。

0 -> 收缩到初始大小

*/

(注:红字是收缩你的数据库mdf文件,时间可能有点长;蓝字是收缩ldf文件;紫字是更新一下,非重要)

完工,这时候你应该可以看到数据库的mdf文件大小变化差异,不说几十M,笔者的数据库就从6G收缩到1G左右,再次执行查询一些数据,明显快多了。

SqlServer 删除所有表

发布于:
Script其他(计算机)

如果由于外键约束删除table失败,则先删除所有约束:

--/第1步**********删除所有表的外键约束*************************/

DECLARE c1 cursor for
select 'alter table ['+ object_name(parent_obj) + '] drop constraint ['+name+']; '
from sysobjects
where xtype = 'F'
open c1
declare @c1 varchar(8000)
fetch next from c1 into @c1
while(@@fetch_status=0)
begin
exec(@c1)
fetch next from c1 into @c1
end
close c1
deallocate c1

--/第2步**********删除所有表*************************/

use 数据库名(是要删除表的所在的那个数据库的名称)
GO
declare @sql varchar(8000)
while (select count(*) from sysobjects where type='U') > 0
begin
SELECT @sql='drop table ' + name
FROM sysobjects
WHERE (type = 'U')
ORDER BY 'drop table ' + name
exec(@sql) 
end

删除所有的存储过程同理可得,但不需要走第一步,只需将第2步的代码的where type=’U’ 改成 where type=’P’,drop table 改成 drop Procedure。

又写了删除数据保留架构的。。凑合用。。

USE [alumnus_cisisu_edu_cn]
GO

DECLARE @temp TABLE(tableName NVARCHAR(255));

INSERT INTO @temp(tableName)
SELECT Name  FROM SysObjects Where XType='U' ORDER BY Name;


declare @sql varchar(8000);
declare @tableName varchar(255);
while (select count(*) from @temp) > 0
begin
  SELECT @tableName= tableName FROM  @temp;
  
  DELETE  @temp WHERE  tableName=@tableName;
  set @sql = 'DELETE ' + @tableName
  ---print @sql
  exec(@sql) 
end

后来又重新写了一个 利用 sp_MSForEachTable 删除表数据保留结构的语句

 

重新安装 Microsoft SQL Server 2008 Express R2 的悲剧

发布于:
Microsoft.Net

安装完 Visual Studio好像就安装了 Microsoft SQL Server 2008 Express 但是今天用的时候没找到 管理工具。。去下管理工具的时候。。发现出现了R2新版本。于是就想卸载重新装。

这下倒好。死活装不上。于是根据提示开始排错。

错误提示定位到 dw20shared.msi ,把他从安装目录拷贝出来。运行。

又提示“系统管理员设置了系统策略禁止进行此安装”,google一搜,出来千万条。不外乎改策略。注册表之类。天下网络一大抄嘛。统统的。无效!!如此反复。甚是疲惫..遂放弃。来看看是不是软件的问题。

于是我仔细端详这块软件,看他说明,曰“Microsoft Application Error Reporting”,想,是不是SQL没阉割干净呢,关于阉干净引来的问题以前倒是遇到过不少。开注册表搜索。。。果然。。然后。。当然阉了他。。

Microsoft Application Error Reporting 注册表项
000021599B0090400000000000F01FEC
95120000-00B9-0409-0000-0000000FF1CE

现运行。dw20shared.msi。不报错。。哈哈。。问题找到(还得再清一次注册表,因为我运行了一次安装文件)。。。

再安Microsoft SQL Server ,豁然。。。开朗!!!

终于,安装。完成 !!!