【发布时间】:2015-10-01 18:41:56
【问题描述】:
我不知道这是否是一个错误。
我发现在运行此代码时,MyComments 列中的值被截断为第一个字母。它似乎与变量@MYComments 的声明有关,因为在我将声明更改为VARCHAR(MAX) 之后它起作用了,但对我来说似乎很奇怪的是,如果没有将值设置为变量@MYComments 函数@987654325 @ 调用应该返回当前值。
DECLARE @MYComments AS VARCHAR
UPDATE [dbo].[TestIssue]
SET MYComments = ISNULL(@MYComments,MYComments)
我能够使用这个脚本重现这个。
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.TestIssue
(
id int NOT NULL,
MYComments varchar(MAX) NOT NULL
) ON [PRIMARY]
TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE dbo.TestIssue SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
select Has_Perms_By_Name(N'dbo.TestIssue', 'Object', 'ALTER') as ALT_Per, Has_Perms_By_Name(N'dbo.TestIssue', 'Object', 'VIEW DEFINITION') as View_def_Per, Has_Perms_By_Name(N'dbo.TestIssue', 'Object', 'CONTROL') as Contr_Per
INSERT INTO [dbo].[TestIssue]
([id]
,[MYComments])
VALUES
(1
,'MY COMMENT 1')
GO
SELECT * FROM [dbo].[TestIssue]
DECLARE @MYComments AS VARCHAR
UPDATE [dbo].[TestIssue]
SET MYComments = ISNULL(@MYComments,MYComments)
SELECT * FROM [dbo].[TestIssue]
【问题讨论】:
标签: sql-server truncate isnull