算术溢出 nvarchar

Arithmetic overflow nvarchar

我有一个 table:

CREATE TABLE [dbo].[TABLE]
(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [CHARG] [nchar](255) NOT NULL,
    [MATNR] [nchar](30) NOT NULL,
    [VLTYP] [nchar](30) NOT NULL,
    [VLPLA] [nchar](30) NOT NULL,
    [NLTYP] [nchar](30) NOT NULL,
    [NLPLA] [nchar](30) NOT NULL,
    [BDATU] [nchar](30) NOT NULL,
    [DATES] [nchar](30) NOT NULL,
    [TIMES] [nchar](30) NOT NULL,
    [TIMESTAMP] [datetime] NOT NULL,
)

我使用这个 SQL 查询:

SELECT * 
FROM 
    (SELECT 
         [ID], [CHARG], [MATNR], [VLTYP], [VLPLA],
         [NLTYP], [NLPLA], [BDATU], [DATES], 
         [TIMES], [TIMESTAMP],
         RANK() OVER (PARTITION BY NLPLA ORDER BY timestamp DESC) AS lastN,
         CASE WHEN NLPLA ='X-X-1' THEN (CAST(NLPLA as nchar(6))+'-'+(CAST(RANK() OVER (PARTITION BY NLPLA ORDER BY TIMESTAMP desc )as nchar(3))))
            ELSE (CAST(NLPLA as nchar(6))+'-'+(CAST(RANK() OVER (PARTITION BY NLPLA ORDER BY TIMESTAMP ASC)as nchar(3)))) End as LINESKATE,
         CASE  WHEN NLPLA = 'X-X-1' THEN 'X-X-1'
        WHEN MATNR <> FIRST_VALUE(MATNR) OVER (PARTITION BY NLPLA ORDER BY timestamp) AND NLPLA !='X-X-1'
            THEN 'WRONG'
        WHEN NLPLA LIKE 'DIFF%' THEN 'Different'
        WHEN TIMESTAMP = LAST_VALUE(TIMESTAMP) over (partition by MATNR order by timestamp ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AND NLPLA !='X-X-1'
             THEN 'LAST'
        ELSE 'RIGHT' 
        END as status_text
     FROM [DB].[dbo].[TABLE]
)t
WHERE (NLPLA = 'X-X-1' AND lastN <= 6) OR (NLPLA !='X-X-1')

我有时会收到一条错误消息:

Arithmetic overflow error converting expression to data type nvarchar.

例如,在 table 设计中是否有问题导致此问题或以某种方式修改了 SQL 查询?

您需要在下面的转换中为 NCHAR 提供足够的长度。我觉得排名要超过999了

 (CAST(NLPLA as nchar(6))+'-'+(CAST(RANK() OVER (PARTITION BY NLPLA ORDER BY TIMESTAMP ASC)as nchar(3)))) End as LINESKATE, -- you have defined NCHAR(3) here