任何人都可以告诉我这两个查询之间的区别(除了明显的区别): 1)
declare @coy_oid varchar
declare @field_name varchar
set @coy_oid = '10'
set @field_name = 'ResultReason'
SELECT OID, POSITION, DESCRIPTION, FIELD_NAME
FROM T_FIELD_TEXT_CHOICES
WHERE COY_OID = @coy_oid AND FIELD_NAME = @field_name
2)
declare @coy_oid varchar
declare @field_name varchar
set @coy_oid = '10'
set @field_name = 'ResultReason'
SELECT OID, POSITION, DESCRIPTION, FIELD_NAME
FROM T_FIELD_TEXT_CHOICES
WHERE COY_OID = @coy_oid AND FIELD_NAME = 'ResultReason'
第一个没有返回任何内容,第二个返回预期结果。我确信它与FIELD_NAME是一个变量有关,但我不知道为什么。
猜猜我应该添加这是SQL Server 2008 R2,但也许没关系。
答案 0 :(得分:8)
您将变量声明为varchar
。这是一个单个字符,因此在第一个查询中,您将与“R”进行比较。你可能想要使用类似varchar(100)
...
答案 1 :(得分:3)
varchar
相当于varchar(1)
要考虑这一点
DECLARE @v1 VARCHAR
SET @v1 = '12345'
DECLARE @v2 VARCHAR (5)
SET @v2 = '12345'
SELECT @v1 AS v1, @v2 AS v2
返回
'1' for v1
'12345' for v2
答案 2 :(得分:0)
解决方案:
declare @coy_oid varchar(100)
declare @field_name varchar(100)