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

时间:2017-10-20 02:48:10

标签: sql sql-server tsql

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

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

目前,我正在使用的表位于dbo架构中,所以我得到的只是“d”。我做错了什么?

1 个答案:

答案 0 :(得分:6)

本声明:

DECLARE @LABEL NVARCHAR;

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

你需要一个长度:

DECLARE @LABEL NVARCHAR(255);

在SQL Server中使用字符声明时,总是包括长度。