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

时间:2015-06-29 20:30:07

标签: 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 

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,但也许没关系。

3 个答案:

答案 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)