我无法在SQL查询中使用变量消息137必须声明标量变量

Jul*_*aga 0 sql t-sql sql-server

我想创建一个查询,在一些变量定义的时间范围内计算一些指标,但我不确定是否可以按我想要的方式使用变量.

我收到以下错误:

消息137,级别15,状态2,行7
必须声明标量变量"@vDiai".

该列TPO_CFecha是类型int.

我不知道我做错了什么:

DECLARE @vDiai INT;
DECLARE @vDiaf INT;
SET @vDiai = 20171030;
SET @vDiaf = 20181030;

USE DBDMS
GO

SELECT 
    CAST(100 * Baja / (HeadcountBruto / Dias) AS decimal(20, 5)) 
FROM 
    (SELECT 
         SUM(ROT_IBAJA) AS Baja,
         COUNT(DISTINCT R.TPO_KFecha) AS Dias,
         SUM(ROT_IHCOUNT) AS HeadcountBruto
     FROM 
         TH_Rotacion R
     INNER JOIN 
         TD_Tiempo T ON R.TPO_KFECHA=T.TPO_KFecha
     WHERE 
         T.TPO_CFecha >= @vDiai
         AND T.TPO_CFecha <= @vDiaf) T
go

SELECT DATA_TYPE 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE 
     TABLE_NAME = 'TD_Tiempo' AND 
     COLUMN_NAME = 'TPO_CFecha'
go
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 8

GO休息了你的脚本.只需移动或删除它:

USE DBDMS
GO

DECLARE @vDiai INT;
DECLARE @vDiaf INT;
SET @vDiai = 20171030;
SET @vDiaf = 20181030;

SELECT CAST(100*Baja/(HeadcountBruto/Dias) AS decimal(20,5)) 
FROM (SELECT SUM(ROT_IBAJA) AS Baja,
             COUNT(DISTINCT R.TPO_KFecha) AS Dias,
             SUM(ROT_IHCOUNT) AS HeadcountBruto
      FROM TH_Rotacion R INNER JOIN
           TD_Tiempo T
           ON R.TPO_KFECHA = T.TPO_KFecha
      WHERE T.TPO_CFecha >= @vDiai AND T.TPO_CFecha <= @vDiaf
     ) T;
Run Code Online (Sandbox Code Playgroud)

  • 更具体一点,SSMS中的"GO"和"sqlcmd"是一个批处理分隔符.变量仅存在于声明的批处理中.当"GO"结束批次时,它在第二批中不可用于参考. (4认同)