【问题标题】:Merge stored procedure合并存储过程
【发布时间】:2020-11-26 10:14:33
【问题描述】:
 CREATE TABLE [dbo].[SupplierTableType](
    [Supplier_ID] [nvarchar](10)  NULL,
    [Supplier_Name] [nvarchar](50)  NULL,
    [Address1] [nvarchar](30) NULL,
    [Address2] [nvarchar](30) NULL,
    [Address3] [nvarchar](30) NULL,
)
GO
--------------------Procedure----------------------
CREATE PROCEDURE [dbo].[Update_SupplierTable]
      @TblSupplierTable SupplierTableType READONLY
AS
BEGIN
      SET NOCOUNT ON;
      MERGE INTO SupplierTable c1
      USING @TblSupplierTable c2
      ON c1.Supplier_ID=@TblSupplierTable.Supplier_ID
      WHEN MATCHED THEN
      UPDATE SET 
       c1.[Supplier_Name]= c2.[Supplier_Name]
      , c1.[Address1]=c2.[Address1]
      , c1.[Address2]=c2.[Address2]
      , c1.[Address3]=c2.[Address3]
      
      WHEN NOT MATCHED THEN
      INSERT VALUES( @TblSupplierTable.[Supplier_Name],
       c2.[Address1],
       c2.[Address2],
       c2.[Address3]
);
END

消息 2715,级别 16,状态 3,过程 Update_SupplierTable,第 3 行 [批处理开始第 56 行] 列、参数或变量 #1:找不到数据类型 SupplierTableType。 参数或变量“@TblSupplierTable”的数据类型无效。 消息 1087,级别 16,状态 1,过程 Update_SupplierTable,第 8 行 [批处理开始第 56 行] 必须声明表变量“@TblSupplierTable”。

【问题讨论】:

  • 顺便说一句,没有提示,MERGE 不是原子的......

标签: sql sql-server


【解决方案1】:

您必须为SupplierTableType 创建一个数据类型,而不是创建一个表。

即而不是

CREATE TABLE SupplierTableType...

你必须使用

CREATE TYPE SupplierTableType AS TABLE ...

请参阅docs 了解更多信息。

【讨论】:

    猜你喜欢
    • 2019-03-07
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    相关资源
    最近更新 更多