我需要一个表来记录数据模型中的所有类型.我没有那么多类型,但是有很多类型的.理想情况下,简短的描述性名称可以很好地运作.
所以我这样做了:
CREATE TABLE EntityType
(
EntityTypeID char(2) PRIMARY KEY,
EntityTypeName varchar(128) NOT NULL
)
并将一些数据放入表中:
INSERT INTO EntityType VALUES ('A', 'Type1')
INSERT INTO EntityType VALUES ('B', 'Type2')
但我可以这样查询让我感到困惑:
DECLARE @pEntityType char(1)
SET @pEntityType = 'A'
SELECT ''''+EntityTypeID+'''', EntityTypeName
FROM EntityType
WHERE EntityTypeID = @pEntityType
结果产生’A’,并且该文字中有空格.
我的理解是有一个隐含的转换,即转换char(1) – >炭(2)
我不是在抱怨,但这背后的理由是什么?
最佳答案 行为的原因是在SQL Server中的字符串比较中忽略尾随空格.无论是否使用固定或可变长度数据类型,都会发生这种情况,如下所示.
DECLARE @EntityType TABLE
(
EntityTypeID varchar(2) PRIMARY KEY,
EntityTypeName varchar(128) NOT NULL
)
INSERT INTO @EntityType VALUES ('A ', 'Type1')
INSERT INTO @EntityType VALUES ('B', 'Type2')
DECLARE @pEntityType varchar(1)
SET @pEntityType = 'A'
SELECT ''''+EntityTypeID+'''', EntityTypeName
FROM @EntityType
WHERE EntityTypeID = @pEntityType