【问题标题】:SQL Server - Must declare the scalar variableSQL Server - 必须声明标量变量
【发布时间】:2020-05-27 20:54:39
【问题描述】:

我正在尝试声明这些值并使用执行它们来获取表中属性的特定值。但是,每次我尝试设置 @test 和 @columnPeriod 时,它都会给我错误必须声明标量变量“@test”必须声明标量变量“@columnPeriod”

DECLARE @columnPeriod VARCHAR(MAX), @test INT;
SET @test = 2015;
SET @columnPeriod = 'SELECT Period FROM Courses WHERE year = ' + @test + '';

【问题讨论】:

  • 为什么在存储字符串时 columnPeriod 是 int ?将 @columnPeriod 更改为 varchar 或 nvarchar。
  • 感谢您的提及。只是拼写错误@JonH
  • 如果您运行SELECT Period FROM Courses WHERE year = '2015';,您是否会返回超过 1 条记录? SELECT distinct Period FROM Courses WHERE year = '2015'; 呢?
  • 我无法重现您的错误。当我在您的问题中运行代码时,我得到Conversion failed when converting the varchar value 'SELECT Period FROM Courses WHERE year = ' to data type int.,那是因为您正在尝试使用int 类型变量test 进行字符串连接。如果您不发布产生错误的实际代码,人们很难帮助您。

标签: sql-server tsql


【解决方案1】:

你不能将字符串和整数结合起来

试试

SET @columnPeriod = 'SELECT Period FROM Courses WHERE year = ' + CONVERT(VARCHAR(12),@test) + ' Limit 1';

这也会限制您的选择以确保它是标量的

【讨论】:

  • 我知道我将 INT 写为变量类型,但这是一个错误。我有它作为VARCHAR(MAX)。但是,即使我尝试运行SET @test = 2015;,它也会给我错误。
  • 如果两者都是varchar,请更改您的原始帖子。
【解决方案2】:
DECLARE @columnPeriod INT, @test varchar(4);
SET @test = '2015';
SET @columnPeriod = SELECT distinct Period FROM Courses WHERE year = ' + @test + '';

假设是:

  • 如果您有多个但所有相同的“期间”,则 2015 年期间只有一个记录,则可能需要区分。如果有多个,则不能这样做,因为返回的记录集不止一行...
  • 年份是 varchar 数据类型

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多