程序或函数!!!指定的参数太多

2024-04-09

我正在 SQL Server 2008 中开发我的第一个存储过程,需要有关错误消息的建议。

过程或函数 xxx 指定了太多参数

执行存储过程后得到的[dbo].[M_UPDATES]调用另一个名为的存储过程etl_M_Update_Promo.

打电话时[dbo].[M_UPDATES](代码见下文)通过单击鼠标右键并“执行存储过程”,查询窗口中显示的查询为:

USE [Database_Test]
GO

DECLARE @return_value int

EXEC    @return_value = [dbo].[M_UPDATES]

SELECT  'Return Value' = @return_value

GO

输出是

消息 8144,级别 16,状态 2,过程 etl_M_Update_Promo,第 0 行
过程或函数 etl_M_Update_Promo 指定了太多参数。

QUESTION:这个错误消息到底是什么意思,即哪里参数太多?如何识别他们?

我发现有几个线程询问此错误消息,但提供的代码与我的完全不同(如果不是使用另一种语言,例如C#反正)。所以所有答案都没有解决我的问题SQL查询(即 SP)。

注意:下面我提供了两个SP使用的代码,但我更改了数据库名称、表名称和列名称。所以,请不要担心命名约定,这些只是示例名称!

(1) SP1 的代码 [dbo].[M_UPDATES]

USE [Database_Test]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[ M_UPDATES] AS
declare @GenID bigint
declare @Description nvarchar(50)

Set @GenID = SCOPE_IDENTITY()
Set @Description = 'M Update'

BEGIN
EXEC etl.etl_M_Update_Promo @GenID, @Description
END

GO

(2) SP2 代码 [etl_M_Update_Promo]

USE [Database_Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [etl].[etl_M_Update_Promo]
@GenId bigint = 0
as

declare @start datetime = getdate ()
declare @Process varchar (100) = 'Update_Promo'
declare @SummeryOfTable TABLE (Change varchar (20))
declare @Description nvarchar(50)
declare @ErrorNo int
, @ErrorMsg varchar (max)
declare @Inserts int = 0
, @Updates int = 0
, @Deleted int = 0
, @OwnGenId bit = 0

begin try


if @GenId = 0 begin
INSERT INTO Logging.dbo.ETL_Gen (Starttime)
VALUES (@start)

SET @GenId = SCOPE_IDENTITY()
SET @OwnGenId = 1
end


MERGE [Database_Test].[dbo].[Promo] AS TARGET
USING OPENQUERY( M ,'select * from m.PROMO' ) AS SOURCE 
ON (TARGET.[E] = SOURCE.[E]) 


WHEN MATCHED AND  TARGET.[A] <> SOURCE.[A]
  OR TARGET.[B] <> SOURCE.[B]
  OR TARGET.[C] <> SOURCE.[C]
  THEN 
UPDATE SET TARGET.[A] = SOURCE.[A]
  ,TARGET.[B] = SOURCE.[B]
  , TARGET.[C] = SOURCE.[c]

WHEN NOT MATCHED BY TARGET THEN 
INSERT ([E]
  ,[A]
  ,[B]
  ,[C]
  ,[D]
  ,[F]
  ,[G]
  ,[H]
  ,[I]
  ,[J]
  ,[K]
  ,[L]  
  ) 
VALUES (SOURCE.[E]
  ,SOURCE.[A]
  ,SOURCE.[B]
  ,SOURCE.[C]
  ,SOURCE.[D]
  ,SOURCE.[F]
  ,SOURCE.[G]
  ,SOURCE.[H]
  ,SOURCE.[I]
  ,SOURCE.[J]
  ,SOURCE.[K]
  ,SOURCE.[L]
)

OUTPUT $ACTION  INTO @SummeryOfTable; 


with cte as (
SELECT
Change,
COUNT(*) AS CountPerChange
FROM @SummeryOfTable
GROUP BY Change
)

SELECT
@Inserts =
    CASE Change
        WHEN 'INSERT' THEN CountPerChange ELSE @Inserts
    END,
@Updates =
    CASE Change
        WHEN 'UPDATE' THEN CountPerChange ELSE @Updates
    END,
@Deleted =
    CASE Change
        WHEN 'DELETE' THEN CountPerChange ELSE @Deleted
    END
FROM cte


INSERT INTO Logging.dbo.ETL_log (GenID, Startdate, Enddate, Process, Message, Inserts, Updates, Deleted,Description)
VALUES (@GenId, @start, GETDATE(), @Process, 'ETL succeded', @Inserts, @Updates,     @Deleted,@Description)


if @OwnGenId = 1
UPDATE Logging.dbo.ETL_Gen
SET Endtime = GETDATE()
WHERE ID = @GenId

end try
begin catch

SET @ErrorNo = ERROR_NUMBER()
SET @ErrorMsg = ERROR_MESSAGE()

INSERT INTO Logging.dbo.ETL_Log (GenId, Startdate, Enddate, Process, Message, ErrorNo, Description)
VALUES (@GenId, @start, GETDATE(), @Process, @ErrorMsg, @ErrorNo,@Description)


end catch
GO

您可以使用 2 个参数(@GenId 和 @Description)调用该函数:

EXEC etl.etl_M_Update_Promo @GenID, @Description

但是您已声明该函数采用 1 个参数:

ALTER PROCEDURE [etl].[etl_M_Update_Promo]
    @GenId bigint = 0

SQL Server 告诉你[etl_M_Update_Promo]仅需要 1 个参数 (@GenId)

您可以通过指定来更改过程以采用两个参数@Description.

ALTER PROCEDURE [etl].[etl_M_Update_Promo]
    @GenId bigint = 0,
    @Description NVARCHAR(50)
AS 

.... Rest of your code.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序或函数!!!指定的参数太多 的相关文章

  • SQL Server Like 查询不区分大小写

    Query SELECT from Table 2 WHERE name like Joe Output 1 100 Joe 2 200 JOE 3 300 jOE 4 400 joe 为什么不区分大小写 Problem 查询不区分大小写
  • 如何比较行内的重叠值?

    我似乎对这个 SQL 查询有问题 SELECT FROM appts WHERE timeStart gt timeStart AND timeEnd lt timeEnd AND dayappt boatdate 时间格式为军用时间 物流
  • 唯一约束与唯一索引?

    之间有区别吗 CREATE TABLE p product no integer name text UNIQUE price numeric and CREATE TABLE p product no integer name text
  • 删除重复的行并需要在mysql中保留所有行中的一个[重复]

    这个问题在这里已经有答案了 我想删除基于两列的重复行 但需要保留所有行 1 行 重复行可以多于两行 例如 ID NAME PHONE 1 NIL 1234 2 NIL 1234 3 NIL 1234 4 MES 5989 我想从上面 3 行
  • REGEXP_REPLACE - 仅当包含在 () 中时才从字符串中删除逗号

    我在 oracle 论坛网站找到了一个例子 输入字符串 a b c x y z a xx yy zz x WITH t AS SELECT a b c x y z a xx yy zz x col1 FROM dual SELECT t c
  • 将数据从电子表格迁移到 RDBMS 的策略是什么?

    这与我的另一个问题相关何时从电子表格迁移到 RDBMS https stackoverflow com questions 2395607 when to switch from spreadsheet to rdbms 决定从 Excel
  • 如何将事物的组合映射到关系数据库?

    我有一个表 其记录代表某些对象 为了简单起见 我假设该表只有一列 这是唯一的ObjectId 现在我需要一种方法来存储该表中的对象组合 组合必须是唯一的 但可以是任意长度 例如 如果我有ObjectIds 1 2 3 4 我想存储以下组合
  • ORA-00933 与内部联接和“as”混淆

    我有一个使用以下命令从两个表中获取数据的查询inner join 但我收到错误SQL command not properly ended as 下面有一个星号 select P carrier id O order id O aircra
  • 私人聊天系统MYSQL查询显示发送者/接收者的最后一条消息

    在这里我延伸一下我之前的问题 私人聊天系统MYSQL查询ORDERBY和GROUPBY https stackoverflow com questions 10929366 private chat system mysql query o
  • SQL Server 2012:有条件地增加计数器用户 ROW_NUMBER()

    我正在尝试申请ROW NUMBER 根据特定条件增加计数器 我的数据如下所示 目标计数器是Prep column id DSR PrepIndicator Prep 1662835 1 1 1 1662835 14 2 2 1662835
  • 如何使用 SQL 通过表示多级订单的 varchar 字段正确排序?

    我不太喜欢数据库 我发现在查询上出现以下问题SQL服务器数据库旧的遗留应用程序的 我声明不幸的是我无法更改数据库结构 字段类型 这非常难看 我有以下情况 SELECT Sottocategoria IdSottocategoria IdCa
  • Extbase - 从查询中获取创建的sql

    我想从我的typo3 扩展中获取一些数据库表 该扩展基于 extbase 查询总是不返回任何内容 但数据存在 我试过这个 query this gt createQuery query gt statement SELECT FROM my
  • 自动提取数据 - Oracle SQL Developer

    我通过 SQL Developer 连接到 Oracle 数据库 我想编写一个返回每月数据集的查询 然后将该数据提取到分隔文本文件中 我知道如何做到这一点就好了 我想知道是否有一种方法可以编写一个脚本来运行查询并在一年内逐月提取数据 这样我
  • Android中不同线程的数据库访问

    我有一个在 AsyncTasks 中从互联网下载数据的服务 它解析数据并将其存储在数据库中 该服务持续运行 当服务写入数据库时 活动会尝试从数据库中读取更改 我有一个数据库助手 有多种写入和读取方法 这会导致问题吗 可能尝试从两个不同的线程
  • 在 PostgreSql 中计算百分比

    例如我有一个这样的表 string adm A 2 A 1 B 2 A 1 C 1 A 2 通过 SQL 查询 我想要这样的结果 string perc adm A 50 B 100 C 0 我想要每个字符串中数字 2 出现的百分比 我可以
  • MySQL:如何获取每个分组的x个结果数[重复]

    这个问题在这里已经有答案了 可能的重复 mysql 在 GROUP BY 中使用 LIMIT 来获取每组 N 个结果 https stackoverflow com questions 2129693 mysql using limit w
  • 如何更新 pl/sql 中嵌套表的列? [复制]

    这个问题在这里已经有答案了 我正在尝试在表中创建一个可以存储多个值的列 如下所示 我有一个学生id std和一个名为marks可以采用几个值 例如2 3 4 我想更新此列表以添加另一个标记2 3 4 5但我不知道怎么做 我如何更新专栏mar
  • theta 连接、等值连接和自然连接之间的区别

    当涉及到 theta 连接 等值连接和自然连接时 我无法理解关系代数 有人可以帮助我更好地理解它吗 如果我在 theta 连接上使用 符号 它与使用自然连接完全相同吗 A 西塔加入允许任意比较关系 例如 An equijoin是使用相等运算
  • 分组和切换列和行

    我不知道这是否会被正式称为枢轴 但我想要的结果是这样的 Alex Charley Liza 213 345 1 23 111 5 42 52 2 323 5 23 1 324 5 我的输入数据采用这种形式 Apt Name
  • 根据由另一列分组的不同列的最大值获取值[重复]

    这个问题在这里已经有答案了 我想根据由另一列分组的不同列的最大值来获取列的值 我有这张表 KEY NUM VAL A 1 AB B 1 CD B 2 EF C 2 GH C 3 HI D 1 JK D 3 LM 并想要这样的结果 KEY V

随机推荐

  • 获取纸质单选按钮的值

    我有以下代码
  • UITableview 中的自动布局与动态单元格高度

    对于我的表格视图单元格的动态高度 我从此链接中引用 在 UITableView 中使用自动布局来实现动态单元格布局和可变行高 https stackoverflow com questions 18746929 using auto lay
  • Grails 和子域

    Grails 知道有关子域 即 subdomain domain com 的任何信息吗 我没有看到它在manual http grails org doc 2 0 x guide single html 这纯粹是应用程序服务器 网络服务器问
  • Pygame.mixer 模块丢失?

    我正在尝试为朋友制作一个小程序 它需要运行 wav 文件 当我在 python 中运行它时它工作正常 但是当我在 py2exe 中编译它时它给了我这个 gt phone exe 23 RuntimeWarning use mixer DLL
  • 函数参数的模式匹配

    我有一个元组向量 val l for i lt 1 to 5 yield i i 2 Vector 1 2 2 4 3 6 4 8 5 10 我想用以下方式总结一下 l reduce x y gt x 1 y 1 x 2 y 2 15 30
  • C++ 链接错误

    我有多个通过 hxx 头文件和继承连接的类 这都是关于操作系统模拟的 我单独编译它们 看看是否有任何语法错误 但事实并非如此 相反 当我编译主驱动程序 osTester cxx 时 我得到这样的链接错误 include
  • 有没有办法直接消耗人造丝链而不先收集它?

    我使用 Rayon 来产生相当大的返回值 将所有返回值收集到一个中时 这会使用大量内存Vec 有没有办法避免创建Vec并直接作为可迭代对象使用 这是一个不起作用的示例 fn main let numbers Vec lt gt 12 03
  • Python:如何修复我的代码以便追加将参数添加到列表中?

    我对 python 很陌生 我一直在尝试执行此代码 其中我使用 tkinter 按钮命令来运行函数 它可以工作 但append 没有执行 这意味着它不会附加到列表中 列表和包含附加的函数位于类外部 然后通过使用 tkinter 按钮命令在类
  • numpy.choose 的替代方案允许任意或至少超过 32 个参数?

    使用我的代码 我遇到了一个问题numpy choose方法不接受所有参数 因为它受到以下限制NPY MAXARGS 32 是否有可用的替代方案 允许任意数量的参数数组或至少超过32那是一样快numpy choose choices np a
  • 带有 UpdatePanel 回发的 ajax“正在加载”图标

    我有一个根据用户选择使用 Ajax 动态构建的表单 使用 UpdatePanel 内置于 NET Ajax 如何在回发发生时插入 标准 ajax 加载图标 也许将其附加到鼠标指针 然后在回发完成后将其删除 如果有帮助的话 我确实安装了 Aj
  • 如果存在以前的版本,如何使msi覆盖程序?

    我正在使用 Visual Studio 2010 我正在开发一个 Windows 应用程序 在尝试为其创建自动更新程序时遇到了严重的问题 当程序找到新版本并尝试安装它时 由于以下两个原因而无法安装 1 the application is
  • numpy中如何进行卷积矩阵运算?

    有办法吗卷积矩阵 https en wikipedia org wiki Kernel image processing 使用numpy进行操作 The numpy convolve https docs scipy org doc num
  • Shape、Sprite、MovieClip 和其他显示对象:何时使用?

    有大量的显示对象flash display包裹 我不清楚在什么情况下应该使用Shape Sprite or MovieClip 使用它们各自的优点和缺点是什么 先感谢您 Shape http help adobe com en US Fla
  • 通过同时/并发文件传输加速 rsync?

    我们需要转移15TB尽可能快地将数据从一台服务器传输到另一台服务器 我们目前正在使用rsync但我们只能得到大约的速度150Mb s 当我们的网络能够900 Mb s 测试与iperf 我已经对磁盘 网络等进行了测试 发现 rsync 一次
  • C/找到190! C 编程中的(阶乘)

    我尝试寻找190 in C 我将变量定义为 long double 但我发现它 正确 仅计算为 172 之后 我得到了 INF00000 有什么办法可以做到吗 实际上只需几行代码即可实现足够的 bigint 实现来计算阶乘 下面的代码打印前
  • PushSharp 不识别 APN 生产证书

    我开发了一个 iOS 应用程序 可以接收推送通知 我使用 PushSharp 从 NET 环境发送它们 开发过程中一切都很顺利 推送已成功发送 var push new PushBroker var appleCert File ReadA
  • 在 Python 中打印进度条处理

    我编写了这个简单的函数 processing flush 以便打印一系列点 由索引给出 来测试我的软件是否正在处理我的数据以及最终的速度 我的数据的总大小未知 import sys import time def processing fl
  • Jackson JSON - 解组时出现“无单字符串构造函数/工厂方法”错误

    最简单的情况给我带来了问题 我第一次遇到这种情况 我能够解组稍微复杂一点的 json 但是这个简单的失败了 是什么导致了这种情况 为什么杰克逊只用一根弦就遇到麻烦 一个简单的类 保存用户角色的名称 public class UpdateUs
  • javascript排序数组双重排序

    我有一个数组MyArrayOfItems of Item具有如下所示对象的对象 Item ContainerID i int ContainerName SomeName string ItemID j int ItemName SomeO
  • 程序或函数!!!指定的参数太多

    我正在 SQL Server 2008 中开发我的第一个存储过程 需要有关错误消息的建议 过程或函数 xxx 指定了太多参数 执行存储过程后得到的 dbo M UPDATES 调用另一个名为的存储过程etl M Update Promo 打