日度归档:2018年5月11日

mssql sqlserver 将数据库从高版本移植到低版本的数据库中


摘要:
生产环境,由于版权问题,我们需要把数据库从sql server 2012降低至sql server 2008 版本,
下文将讲述具体的操作步骤及方法


第一步:在待转换的数据库上点击右键 “任务”–>”生成脚本”
1.mssql_sqlserver_数据库降版本_生成数据库结构

1.mssql_sqlserver_数据库降版本_生成数据库结构


第二步: 在”生成和发布脚本”界面,选择对象时,选择”编写整个数据库及所有数据库对象的脚本”
2.mssql_sqlserver_数据库降版本_编写数据库所有对象

2.mssql_sqlserver_数据库降版本_编写数据库所有对象


第三步: 设置脚本编写选项时, 指定脚本输出地址,并点击”高级”按钮,指定,输出脚本适应的数据库类型,如图:”选择sqls erver 2008″
3.mssql_sqlserver_数据库降版本_编写数据库所有对象

3.mssql_sqlserver_数据库降版本_编写数据库所有对象



第四步:如果数据库中数据量很小,那么在”高级”选项中,选择”要编写脚本的数据的类型”—“架构和数据”,如下图所示:

4.mssql_sqlserver_数据库降版本_编写数据库所有对象

4.mssql_sqlserver_数据库降版本_编写数据库所有对象



注意事项:
如果表的数据量非常大,那么我们在导入数据时,如果能通过远程链接服务器,进行数据传输最好。

sql脚本读取xml时,”提示该位置上不允许有空白”的异常处理


摘要:
读写xml信息时,提示如下错误:
消息 6602,级别 16,状态 2,过程 sp_xml_preparedocument,第 1 行
错误说明是 ‘该位置上不允许有空白。’。
消息 8179,级别 16,状态 5,第 21 行
找不到句柄为 0 的预定义语句。
消息 6607,级别 16,状态 3,过程 sp_xml_removedocument,第 1 行
sp_xml_removedocument: 为参数 1 提供的值无效。


源sql脚本如下所示:
mssql_sqlserver_xml读取异常

mssql_sqlserver_xml读取异常



出现这种异常的原因为:
xml字符串存在格式问题,xml字符串未完全闭合,修正相应的闭合符号后,则一切正常,如下所示:

mssql_sqlserver_xml读取异常处理方法

mssql_sqlserver_xml读取异常处理方法

在SQL Server 2005和SQL Server 2008禁用和启用索引的方法分享


摘要:
在查看SQL Server 2005和SQL Server 2008中的新功能时,
我们在索引上点击右键时,发现了一个“禁用”按钮,表示该索引可用于禁用表或视图上的索引。
下文将着重讲述此禁用索引的操作方法


数据库管理员可以使用SQL Server 2005及更高版本中提供的禁用索引功能来防止用户查询使用索引。
这个功能对于DBA来说非常有用,因为他们需要弄清楚表上的索引是否真的有用。
禁用索引时,索引定义保留在元数据中,
而索引统计信息也保存在非聚簇索引中。
但是,禁用视图上的聚簇索引或非聚簇索引会物理删除索引数据。
—————————————————————————–
如果您在表上禁用聚簇索引,那么表将不可用于用户访问,但数据仍将保留在表中,但在重建或删除索引之前,它将不可用于任何DML操作。
—————————————————————–

我们可以使用
ALTER INDEX REBUILD
CREATE INDEX WITH DROP_EXISTING
来启用禁用的索引。

例1:使用sql脚本禁用索引

 
 ---禁用 AdventureWorks数据库中的Person.Address表上IX_Address_StateProvinceID索引

USE AdventureWorks 
GO 
ALTER INDEX IX_Address_StateProvinceID ON Person.Address DISABLE 
GO 
-- 查询索引的使用情况
SELECT NAME AS [IndexName], TYPE_DESC AS [IndexType], 
CASE IS_DISABLED  
WHEN 0 THEN 'Enabled' 
ELSE 'Disabled'  
END AS [IndexUsage],  
FILL_FACTOR AS [FillFactor] FROM SYS.INDEXES 
WHERE OBJECT_ID = OBJECT_ID('Person.Address') ORDER BY IndexName, IndexUsage 
GO

方法2: 使用SQL Server Management Studio(SSMS)禁用索引

打开数据库AdventureWorks表的对象资源管理器,
找到 Person.Address ,
展开索引并右键单击IX_Address_StateProvinceID(非唯一,非集群)
从下拉列表中选择”禁用”


启用索引的方法分享

方法1:使用sql脚本启用禁用的索引

USE AdventureWorks 
GO 
ALTER INDEX IX_Address_StateProvinceID ON Person.Address REBUILD 
GO

方法2: 带DROP_EXISTING语句的CREATE INDEX启用索引

USE AdventureWorks 
GO 
CREATE NONCLUSTERED INDEX [IX_Address_StateProvinceID] ON [Person].[Address]  
( 
[StateProvinceID] ASC 
)WITH (DROP_EXISTING = ON, FILLFACTOR = 80) ON [PRIMARY] 
GO

方法3:通过ssms管理工具启用索引

打开数据库AdventureWorks表的对象资源管理器,
找到 Person.Address ,
展开索引并右键单击IX_Address_StateProvinceID(非唯一,非集群)
从下拉列表中选择”启用”