包含或不包含参数的SQL查询的差异

And*_*y J 0 sql sql-server sql-server-2008

任何人都可以告诉我这两个查询之间的差异(除了显而易见的):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 
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)

第一个返回任何内容,第二个返回预期结果.我确信它与FIELD_NAME是一个变量有关,但我不知道为什么.

猜猜我应该添加这是SQL Server 2008 R2,但也许没关系.

Ami*_*mit 8

你的变量被声明为varchar.这是一个单个字符,因此在第一个查询中,您将与"R"进行比较.你可能想要用varchar(100)...