【问题标题】:Must declare the scalar variable - Setting variable equal to a SELECT statement必须声明标量变量 - 设置变量等于 SELECT 语句
【发布时间】:2017-05-23 22:08:35
【问题描述】:

我想将 @inputData 设置为 select 语句的行,然后将其传递给我的 DoSomething 存储过程:

DECLARE @inputData [dbo].[TestTableType];

SET @inputData = ( 
    SELECT
        1 AS Client_Id,
        20170202 AS a,
        18595 AS b,
        49.82 AS c,
        88 AS d,
        31 AS e,
        0.67 AS f,
        0 AS g,
        44 AS h,
        1827 AS i,
        5 AS j,
        87 AS k
);

EXEC DoSomething @inputData;

但我收到此错误:

消息 137,第 16 级,状态 1,第 3 行
必须声明标量变量“@inputData”。

我做错了什么?

【问题讨论】:

  • 注意,可以试试insert into @inputData select ...
  • 感谢@user1429080 完美运行!

标签: sql-server stored-procedures


【解决方案1】:

您没有SET 表变量。你INSERT进入他们:

INSERT INTO @inputData /* Should have column list here also */
SELECT
        1 AS Client_Id,
        20170202 AS a,
        18595 AS b,
        49.82 AS c,
        88 AS d,
        31 AS e,
        0.67 AS f,
        0 AS g,
        44 AS h,
        1827 AS i,
        5 AS j,
        87 AS k
;

【讨论】:

    【解决方案2】:

    尝试使用 INSERT INTO。把表类型想象成一个临时表(基本上就是这样)。

    DECLARE @inputData AS TestTableType
    
    INSERT INTO @inputData 
    SELECT
        1 AS Client_Id,
        20170202 AS a,
        18595 AS b,
        49.82 AS c,
        88 AS d,
        31 AS e,
        0.67 AS f,
        0 AS g,
        44 AS h,
        1827 AS i,
        5 AS j,
        87 AS k
    );
    

    【讨论】:

    • 我似乎遇到了同样的问题。平心而论,我的用户定义表类型实际上称为 dbo.TestTableType
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    相关资源
    最近更新 更多