简单的SQL变量赋值只返回一个字母:为什么?

Sag*_*lly 1 sql t-sql sql-server

我试图用代码做的就是将带点名的模式和表名复制到一个变量中,由于某种原因,它给我的全部是第一个字母:

DECLARE @LABEL NVARCHAR

SELECT
    @LABEL = LABEL
FROM(
     SELECT
        ROW_NUMBER() OVER(ORDER BY T.NAME) AS ROW_NUM,
        CONCAT(S.name, '.', T.name) AS LABEL
    FROM sys.tables AS T
        INNER JOIN sys.schemas AS S
            ON T.schema_id = S.schema_id
    WHERE [object_id] <> '917578307' --the diagram table
) AS D
WHERE
    ROW_NUM = 1

SELECT
    @LABEL
Run Code Online (Sandbox Code Playgroud)

目前,我正在使用的表都在dbo架构中,所以我得到的只是"d".我究竟做错了什么?

Gor*_*off 6

这个说法:

DECLARE @LABEL NVARCHAR;
Run Code Online (Sandbox Code Playgroud)

没有长度.没有长度 - 在此上下文中 - SQL Server仅使用一个字符定义变量.

你需要一个长度:

DECLARE @LABEL NVARCHAR(255);
Run Code Online (Sandbox Code Playgroud)

在SQL Server中使用字符声明时,请始终包含长度.