如何在Set @var = Select语句中使用变量

时间:2014-12-09 15:52:09

标签: sql sql-server sql-server-2008

为什么这不起作用? (现在已解决

Declare @var1 Varchar(10)
Set @var1 = 'Value 1'

Declare @var2 Int
Set @var2 = (Select [IntValue]
             From [TableOfValues]
             Where [StringValue] = @var1
            )

Select @var1, [IntValue]

From [TableOfValues]

但这确实......

Declare @var1 Varchar(10)
Set @var1 = 'Value 1'

Declare @var2 Int
Set @var2 = (Select [IntValue]
             From [TableOfValues]
             Where [StringValue] = 'Value 1'
            )

Select @var1, [IntValue]

From [TableOfValues]

我认为它与先运行的括号中的查询有关,但如何在此处获取我之前定义的变量?这显然是更大查询的简化版本。

感谢。

编辑:上述功能正常,但实际查询中的变量超过10个字符。我知道愚蠢的错误,但我整天都在盯着代码。抱歉浪费了任何人的时间。

3 个答案:

答案 0 :(得分:3)

默认情况下,如果您未在声明中提及varchar的大小,那么它将为1因此,@var1只会存储'V' Declare @var1 Varchar(10) Set @var1 = 'Value 1' 得到想要的结果。尝试更改您的声明

{{1}}

答案 1 :(得分:1)

您的声明未达到您对@var1的期望。这是问题所在:

Declare @var1 Varchar
Set @var1 = 'Value 1'

@var1设为V。在此上下文中,没有长度的varchar的默认长度为“1”。在SQL Server中,始终使用varchar的长度:

Declare @var1 Varchar(255);
Set @var1 = 'Value 1'

答案 2 :(得分:0)

一条评论:而不是这样做

Set @var2 = (Select [IntValue]
     From [TableOfValues]
     Where [StringValue] = 'Value 1'
    )

你可以这样做

Select @var2 = [IntValue]
    From [TableOfValues]
    Where [StringValue] = 'Value 1'