变量只存储选择结果的第一个字母

fyo*_*anz 1 sql t-sql

我有一个包含两个字母 nvarchar 作为其内容的单元格,我想将其保存到一个简单的 nvarchar 变量中,但是,使用以下代码仅保存了两个字母单元格内容的第一个字母。

DECLARE @RC NVARCHAR = (SELECT Value FROM @scoreTable WHERE Metric = 'RC')


-- this returns 'ND' as expected
SELECT Value FROM @scoreTable WHERE Metric = 'RC' 

-- but this returns 'N'! Why?
SELECT @RC 
Run Code Online (Sandbox Code Playgroud)

我完全被难住了。如何将两个字母(即单元格的所有内容)保存到变量中@RC

Gor*_*off 6

您需要在 SQL Server 中声明字符类型的长度:

DECLARE @RC NVARCHAR(255) = (SELECT Value FROM @scoreTable WHERE Metric = 'RC')
Run Code Online (Sandbox Code Playgroud)

在 SQL Server(但不是所有其他数据库)中,您应该始终将长度与字符类型一起使用。默认值因上下文而异,因此依赖默认长度可能会令人困惑。