【问题标题】:SQL Server stored procedure as input errorSQL Server 存储过程作为输入错误
【发布时间】:2020-06-19 15:44:29
【问题描述】:

我有以下存储过程并创建了一个自定义类型,然后将表作为参数提供给我的存储过程以更新我的目标表:

-- Create Type
CREATE TYPE dbo.e2m_dt AS TABLE
(
    [ID] BIGINT,
    [text] VARCHAR(max)
)

-- Create Procedure:
CREATE PROCEDURE MERGE_REQUEST_RESULT  
    @temp_table dbo.e2m_dt READONLY
AS
    UPDATE Table1
    SET ID = @temp_table.ID,  
        text = @temp_table.text
    FROM Table1
    INNER JOIN @temp_table ON Table1.ID = @temp_table.ID
GO

但我收到以下错误:

消息 137,级别 16,状态 1,过程 MERGE_REQUEST_RESULT,第 9 行
必须声明标量变量“@temp_table”。

消息 137,级别 16,状态 1,过程 MERGE_REQUEST_RESULT,第 10 行
必须声明标量变量“@temp_table”。

消息 137,级别 16,状态 1,过程 MERGE_REQUEST_RESULT,第 16 行
必须声明标量变量“@temp_table”。

我是 SQL 的新手,任何帮助将不胜感激。

【问题讨论】:

    标签: sql-server stored-procedures


    【解决方案1】:

    ID = @temp_table.ID 将引用标量变量@temp_Table 不是表类型变量@temp_table。为您的对象命名并使用它们:

    CREATE PROCEDURE MERGE_REQUEST_RESULT  @temp_table dbo.e2m_dt READONLY
    AS
            UPDATE T1
            SET ID = tt.ID,  
                [text] = tt.[text]
            FROM Table1 T1
            INNER JOIN @temp_table tt ON T1.ID = tt.ID;
    
    GO
    

    旁注,我建议不要调用您的varchar(MAX) 专栏texttext 是不推荐使用的数据类型。坚持使用非关键字作为对象名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-14
      • 2020-04-28
      • 2018-10-04
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      相关资源
      最近更新 更多