如何转换SQL Server 2008数据库到SQL Server 2005

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何转换SQL Server 2008数据库到SQL Server 2005相关的知识,希望对你有一定的参考价值。

解决方法: 在SQL 2008中右键 数据库--任务--生成脚本 通过脚本生成向导为整个库的对象生成脚本,并设置好相关的脚本生成选项,尤其要注意的是脚本的服务器版本要选择sql server 2005完成向导后,在SQL 2005中执行生成的脚本,这样就把2008的库结构搬到2005了再用数据导入/导出向导把数据导过去就行了

具体过程如下:

managent studio

-- 对象资源管理器(没有的话按F8) 连接到你的2008实例

--右键你要降级的数据库

-- 任务

-- 生成脚本

-- 在随后出现的脚本中, 单击"下一步", 直到"选择数据库"步骤, 确定数据库是你要降级的数据库, 并勾选"为所选数据库中的所有对象生成脚本"

-- 单击"下一步", 把"表/视图选项"中的所有属性都设置为"TRUE", "常规选项"中, 把"编写创建数据库的脚本"设置为TRUE, "为服务器版本编写脚本"设置为"SQL Server 2005"

-- 单击下一步直到完成

完成上述操作后, 脚本向导会生成脚本, 并会打开一个新的查询窗口, 在里面显示生成的脚本

在这个新查询窗口的任意位置按右键--连接--更新连接, 在随后出现的"连接到数据库引擎"对话框中, 连接到你的sql 2005

按F5执行这个脚本, 在sql 2005中创建你要降级的数据库的架构

managent studio

-- 对象资源管理器(没有的话按F8) 连接到你的2008实例

--右键你要降级的数据库

-- 任务

-- 导出数据

根据向导提示, 把你要降级库的所有数据从2008导出到2005
参考技术A 你可以用导入导出功能,将数据导出生存一个excel文件, 导入也是同样方法

如何在SQL Server 2012中的10个不同节点中转换此字符串?

我的字符串是=

[10, 1],[7, 3],[15, 4],[10, 1],[14, 1]

如何将其转换为10个不同的节点/值?我目前的尝试是这样的

select  CAST('<A>'+REPLACE(REPLACE( REPLACE(REPLACE('[10, 1],[7, 3],[15, 4],[10, 1],[14, 1]', '[', ''), ']', ''),',',''),' ','</A><A>')+'</A>' AS XML) AS Data 

答案=

<A>10</A><A>17</A><A>315</A><A>410</A><A>114</A><A>1</A>

我希望它在10个节点/值而不是上面。我应该如何在sql server 2012中做到这一点?

答案

评论太长了

select REPLACE(REPLACE(REPLACE(@data, '],[', ''), '[', ''), ']', '')

结果:

10, 17, 315, 410, 114, 1

编辑:

似乎你只是在寻找价值观

select LTRIM(REPLACE(REPLACE(a.value('.', 'VARCHAR(30)'), '[', ''), ']', '')) [Data] from
(
    select  CAST('<A>'+REPLACE('[10, 1],[7, 3],[15, 4],[10, 1],[14, 1]', ',', '</A><A>')+'</A>' AS xml) AS Data 
)a cross apply Data.nodes ('/A') as split(a)

结果:

Data
10
1
7
3
15
4
10
1
14
1
另一答案

已经提供的答案似乎运作良好,但我考虑使用正则表达式更通用的(可能在更复杂的情况下工作):

  1. 安装sql-server-regex(例如for Sql Server 2014
  2. 使用“拆分”方法 select Match from dbo.RegexSplit(@data, 'D') where Match <> ''

性能测试

我注意到使用CLR函数比REPLACE快得多,如下所示:

  1. 使用RegexSplit(1M元素约20秒) declare @baseMsg varchar(max) = '[10, 1],[7, 3],[15, 4],[10, 1],[14, 1],' declare @data varchar(max) = replicate(@baseMsg, 1000000) select Match from dbo.RegexSplit(@data, 'D') where Match <> ''
  2. 使用REPLACE(2K元素约15秒) declare @baseMsg varchar(max) = '[10, 1],[7, 3],[15, 4],[10, 1],[14, 1],' declare @data varchar(max) = replicate(@baseMsg, 200) select LTRIM(REPLACE(REPLACE(a.value('.', 'VARCHAR(30)'), '[', ''), ']', '')) [Data] from ( select CAST('<A>'+REPLACE(@data, ',', '</A><A>')+'</A>' AS xml) AS Data )a cross apply Data.nodes ('/A') as split(a)

所以,我们谈论的是三个数量级的差异。

当然,应该根据字符串长度,安全权限选择解决方案(可能不允许使用SQLCLR,或者在允许外部库在SQL Server中运行之前必须对其进行分析)。

另一答案

我找到了答案,SQL应该如下:

select  CAST('<A>'+REPLACE(REPLACE( REPLACE(
      REPLACE('[10, 1],[7, 3],[15, 4],[10, 1],[14, 1]', '[', ''),
       ']', ' '),
    ',',''),
  ' ','</A><A>') +'</A>' AS XML) AS Data

以上是关于如何转换SQL Server 2008数据库到SQL Server 2005的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008转换成sql 2000数据库如何操作?

无法通过 T4 模板访问我的 SQL Server 2008 错误返回给我如何获取表?

sq server2008登录不上去了,用windows身份也不行,怎么弄呀

使用 Powershell 从 SQL Server 2008 R2 导出到固定宽度的文本文件

怎么备份SQL Server 2008数据库

从 6.5 到 >= SQL Server 2008 的 SQL 查询转换