5 sql-server-2005 sql-server sql-server-2012
支持带有 SQL Server 2005 后端的现有 VB6 应用程序,我们正在将数据库服务器迁移到 SQL Server 2012。创建生产数据库的备份并将其恢复到两台服务器上的开发数据库中。除了服务器版本之外,数据库是相同的,并且兼容级别仍设置为 90 (SQL Server 2005)。
当我在 SQL Server 2005 上运行查询时,类似于下面的示例,返回一个字符串,其中任何空白字段都有额外的空格。如果我在 SQL Server 2012 上运行相同的查询,则不会返回额外的空格。据我所知,UNION ALL
对没有记录和 char 数据类型的表执行似乎是一个问题,但我还是想问一下。
对于下面的例子中你需要创建一个表一个NOT NULL
,Char(2)
列命名Unit6
。将表留空,一旦创建就没有记录。
CREATE TABLE [dbo].[tblTest](
[Unit6] [char](2) NOT NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
当我运行以下查询时,我收到两种不同的结果,具体取决于服务器版本:
SELECT
Unit5, Unit6,
LEN(Unit6) as Len_Unit6,
'--|' + Unit6 + '|--' as Spanner
FROM
(SELECT
'13' as Unit5,
'' as Unit6
UNION ALL
SELECT
'',
Unit6
FROM tblTest) as MyData
Run Code Online (Sandbox Code Playgroud)
SQL Server 2005 上的结果
SQL Server 2012 上的结果
希望您可以看到 Spanner 列在 2005 年运行时显示两个空格,而在 2012 年运行时显示零个空格。
这是一个主要问题,因为该应用程序运行类似于上述示例的查询,然后使用字符串函数来分割单个字符串以进行数据库插入和更新。如果没有 SQL Server 2005 中包含的空格,字符串函数就会分割错误的部分,从而导致任何插入或更新失败。
任何信息都会是最有帮助的。谢谢!
服务器版本
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
Nov 24 2008 13:01:59
Copyright (c) 1988-2005 Microsoft Corporation
Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
Microsoft SQL Server 2012 (SP1) - 11.0.3393.0 (X64)
Oct 25 2013 19:04:40
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
Run Code Online (Sandbox Code Playgroud)
小智 1
检查 ANSI_PADDING 设置:
控制列存储短于列的定义大小的值的方式,以及列存储 char、varchar、binary 和 varbinary 数据中具有尾随空格的值的方式。
http://msdn.microsoft.com/en-us/library/ms187403.aspx
我刚刚在 SQL Server 2005 和 2012 上尝试过,但没有得到这些结果:
Unit5 Unit6 Len_Unit6 Spanner
----- ----- ----------- --------
13 0 --||--
(1 row(s) affected)
Microsoft SQL Server 2005 - 9.00.5000.00 (Intel X86)
Dec 10 2010 10:56:29
Copyright (c) 1988-2005 Microsoft Corporation
Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
(1 row(s) affected)
Unit5 Unit6 Len_Unit6 Spanner
----- ----- ----------- --------
13 0 --||--
(1 row(s) affected)
Microsoft SQL Server 2012 (SP1) - 11.0.3349.0 (X64)
Mar 8 2013 17:33:56
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
698 次 |
最近记录: |