SQLSERVER 的bug

今天客户反馈发现MS SQL里面有个bug,问题还蛮大所以发出来做个标记:

打开sql的查询窗口,贴入代码如下:

declare @i int
set @i = 1
while @i<5 --循环执行4次
begin

 declare @aa varchar(1)  --定义变量

 print convert(varchar(1),@i)+'--'+isnull(@aa,'')  --打印变量

 select @aa='0' where 1>2  --判断如果1大于2则赋值给变量,判断不成立所以变量还是没有赋值

 if @aa is null  --如果变量没有取到值,则将变量赋值为1
 set @aa = '1'

 set @i = @i + 1  --循环
end

运行完毕,发现什么情况:

1--

2--1

3--1

4--1

循环里面定义的变量,第一次打印这个变量确实正常,因为没有赋值所以为空,

但是后面几次循环就怪了变成1了

这是什么情况?系统竟然把上次循环的值取过来了!

SQLSERVER 在循环里面定义变量,如果变量在循环结束的时候赋值了就会造成下次循环的时候把这个值赋给定义的变量,好饶,头大

最后没有办法,先给变量赋值,然后再执行相关操作:

declare @i int
set @i = 1
while @i<5
begin
	 declare @aa varchar(1)
	 set @aa = ''
	 print convert(varchar(1),@i)+'--'+isnull(@aa,'')
	 select @aa='0' where 1>2
	 if @aa is null
	 set @aa = '1'
	 set @i = @i + 1
end

然后运行结果如下:

1--

2--

3--

4--

唉,这个问题,微软有点水呀

时间: 2024-11-05 22:04:09

SQLSERVER 的bug的相关文章

ERROR [42000]杂谈

出错环境:windows server 2003+sqlserver2008 r2+odbc32 出错详情:System.Data.Odbc.OdbcException:ERROR [42000] [Microsoft][ODBC SQL Server Driver] [SQL Server]字符串'7'后的引号不完整 如图: SQL语句如右:insert into 测试('张三','7 7 7 7 0 6 8','13580891274'); 初步处理: 因为我写的程序,在执行insert语句

SqlServer Bug:扩展存储过程一直运行出现等待类型PREEMPTIVE_OS_GETPROCADDRESS

今天使用xp_readerrorlog第一次在新服务器查询一个死锁信息,结果一直在运行,即使kill了也一直在运行: (分别在2个服务器实例中运行,其中一个已经kill) exec xp_readerrorlog 0,1,NULL,NULL,'2015-01-07 22:13:10','2015-01-07 22:13:11','ASC' 而下面这个执行是正常的,结果很快出来: exec xp_readerrorlog 0,1,'deadlock victim',NULL,'2015-04-01

解决“动软代码生成器在SqlServer中会将唯一索引识别为主键&quot;的Bug

动软代码生成器在SqlServer中,生成的代码会将唯一索引错误地识别为主键, 反编译源代码后,发现其中的SQL条件有误,现修复此Bug. 修复方法:将附件中的”Maticsoft.DbObjects.dll“替换安装目录下的相关文件即可.(替换前请做好备份,该修复基于最新版本V2.78) 若安装在默认目录下,也可直接执行附件中的批处理命令. 修复文件:动软代码生成器_主键Bug修复.rar

SqlServer bug:sp_replqueuemonitor 在SqlServer 2008(RTM) 执行无结果

当前版本:windows server 2008 r2 sp1 + SqlServer 2008 (RTM) sp_replqueuemonitor 此存储过程列出 MicrosoftSQL Server 队列或 Microsoft 消息队列中指定发布的排队更新订阅的队列消息. (在订阅数据库中,查看队列正在执行(或堵塞)的命令--即正在从订阅同步回到发布的命令) 然而该存储过程在windows server 2008 r2 sp1 + SqlServer 2008 (RTM) 执行无任何结果返

SQLServer &#183; BUG分析 &#183; Agent 链接泄露分析(转载)

背景 SQLServer Agent作为Windows服务提供给用户定期执行管理任务,这些任务被称为Job:考虑应用镜像的场景如何解决Job同步问题,AWS RDS的做法是不予理会,由用户维护Job,假如发生切换用户需要在新的Principal端创建Job:另一种做法是镜像端保持同步Job,切换后尽量让用户无感知不需要多余维护动作,但这种做法在某些情况会遇到非常严重的问题--内存耗尽. 问题排查分析 第一次分析 问题发生时实例的ERRORLOG出现: Error: 701, Severity:

SqlServer Bug:复制架构更改参数(replicate_ddl)无效

最近测试可更新订阅的架构更改问题,发现了一个 bug. 在复制中,当在发布数据库对发布数据库进行架构更改时,结构自动同步到订阅中(这就是 复制架构更改).由于某些原因,对某个表增加字段时,不需要同步到订阅.在发布属性中,有一个选项可以控制不同步架构更改.如下图: 只有将 复制架构更改 的值改为 false ,更改结构则不同步,更改实时生效. 也可以脚本来更改该参数: EXEC sp_changepublication @publication = N'publication', @propert

C#中往SQLServer插入数据时遇到BUG

错误信息如下: “System.Data.SqlClient.SqlException”类型的未经处理的异常在 System.Data.dll 中发生 其他信息: “”附近有语法错误. 文字版代码如下: 1 sqlCmd.CommandText =string.Format( "insert into [dbo].[Table4Test]([ID],[Name],[Password])values({0},'{1}','{2}')", dataOfItem[0],dataOfItem[

一个非常罕见的SQLServer镜像异常的排查处理过程

本周一晚上,收到一个数据库镜像SUSPEND和SYNCHRONIZING状态来回切换的告警,看到这个错误,其实也蛮常见的. 我们的修复步骤一般是这样的: 1. ALTER DATABASE *** SET PARTNER RESUME 如果这个步骤还不行,就需要触发一个事务,因为偶尔我们遇到SYNCHRONIZING状态的,可以触发事务修复,其原因可能是镜像由于网络原因冰了一下 2. CREATE TABLE dbo.tb_repair_mirroring_****(ID int), 然后删除该

SQLServer(MSSQL)、MySQL、SQLite、Access相互迁移转换工具 DB2DB v1.4

最近公司有一个项目,需要把原来的系统从 MSSQL 升迁到阿里云RDS(MySQL)上面.为便于测试,所以需要把原来系统的所有数据表以及测试数据转换到 MySQL 上面.在百度上找了很多方法,有通过微软 DTS 的,也有使用 mss2sql 工具进行转换的.使用 DTS 需要预先创建好数据表,否则新迁移的数据库是没有主键的.而 mss2sql 工具可以解决以上问题,但转换速度非常慢!我需要转换 3000 万的数据,在一台相当不错的服务器上面,也需要几天几夜才能转换完成.而 DB2DB 就是在这样