为什么这不起作用? (现在已解决)
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个字符。我知道愚蠢的错误,但我整天都在盯着代码。抱歉浪费了任何人的时间。
答案 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'