用户定义函数中的错误处理

2023-11-24

我想在 SQL Server 2005 中编写一个非 CLR 用户定义函数。该函数接受输入字符串并返回输出字符串。如果输入字符串无效,那么我想向调用者指示错误。

我的第一个想法是使用 RAISERROR 来引发异常。但是,SQL Server 不允许在 UDF 中执行此操作(尽管您可以在基于 CLR 的 UDF 中引发异常,请看图)。

我的最后手段是如果输入值有错误,则从函数返回 NULL(或其他错误指示​​符值)。但是,我不喜欢这个选项,因为它:

  1. 不向调用者提供任何有用的信息
  2. 不允许我返回 NULL 来响应有效输入(因为它被用作错误代码)。

是否有任何调用者友好的方法可以在 SQL Server 中出现错误时停止函数?


看起来 SQL Server UDF 在这种(以及许多其他)方式上有点受限。

你真的无能为力——(目前)就是这样。您可以定义 UDF,以便可以通过其返回值(例如,在发生错误时返回 NULL)来发回错误条件信号,或者您几乎必须求助于编写存储过程,该存储过程可以具有更多的错误处理并允许 RAISERROR 等等。

因此,要么将 UDF 设计为不需要错误条件的特定信号,要么必须重新构建使用存储过程的方法(存储过程可以具有多个 OUTPUT 参数,因此也可以返回错误代码以及数据负载,如果您需要),或 UDF 的托管 CLR 代码。

抱歉,我没有更好的主意 - 恐怕现在,这些都是你的选择 - 你可以选择。

Marc

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

用户定义函数中的错误处理 的相关文章

  • 最佳实践 - 存储过程日志记录

    如果您有一个长时间运行的 SP 您会以某种方式记录其操作还是只是等待此消息 命令成功完成 我认为 关于这个主题可以有很多解决方案 但是有没有最佳实践 一个经常使用的简单解决方案 EDIT 我发现了一个关于这个主题的有趣链接 http web
  • 内联表值 UDF 能否优于 SELECT 列列表中的等效标量 UDF?

    这个问题源于SQLServer 为什么要避免表值用户定义函数 https stackoverflow com questions 1081057 sqlserver why avoid table valued user defined f
  • SSIS 将字符转换为布尔值/位

    我有一个SSIS包来加载数据 您可能还记得 当我尝试将数据文件中的标志作为位标志加载到 SQL Server 中时 这些标志作为 Y N char 1 存在 我将数据文件中的列指定为String DT STR 我有一个数据转换任务 根据以下
  • 无法通过 SQL Server Management Studio 连接到 SQL Server Linux Docker 容器

    我对 Linux 操作系统很陌生 所以希望这不是一个愚蠢的问题 软件 Windows 10 专业版适用于 Windows 的 Docker 1 13 0 beta38 9805 SQL Server Management Studio v1
  • 使用输出在合并语句中设置变量

    我有一个合并语句应该始终更新或插入一条记录 我想记住变量中该语句的 ID 它看起来像这样 DECLARE int int MERGE dbo table AS A USING SELECT stringtomatch AS string A
  • 如何使用索引更改表的列?

    我想将带有某些索引的表中 a 列的列大小从 varchar 200 更改为 varchar 8000 我应该如何进行 既然是VARCHAR你正在增加尺寸 然后简单地ALTER TABLE ALTER COLUMN https learn m
  • SQL 查询中的可选参数在检查 NULL 时非常慢

    我有许多已连接的表 最大行数约为 400 万条记录 我们正在存储过程中搜索该表 并且有一个默认值为 NULL 的可选参数 下面是我们正在运行的编辑示例 连接涉及更多表 但只有 1 个字段具有 WHERE 子句 DECLARE OwnerId
  • SQL Server:删除具有外键约束的行:事务可以覆盖约束吗?

    我有一些添加了外键约束的表 它们与代码生成一起使用 以在生成的存储过程中设置特定的联接 是否可以通过在事务中调用多个删除来覆盖这些约束 特别是 C 中的 TransactionScope 或者绝对需要级联删除吗 不要使用级联删除 这样可能会
  • 如何使用jdbc驱动编写事务?

    我想使用 jdbc 编写一个事务java 我尝试过这个简单的交易 BEGIN TRANSACTION NL GO NL UPDATE table SET col test where id 1010 NL GO NL COMMIT 我尝试过
  • 通过另一个函数将数据和列名称传递给 ggplot

    我将直接跳到一个示例并在后进行评论 cont lt data frame value c 1 20 variable c 1 20 1 20 1 5 1 20 2 group rep c 1 2 3 each 20 value variab
  • System.IndexOutOfRangeException:索引超出了数组的范围[重复]

    这个问题在这里已经有答案了 我正在开发一个 ATM 软件作为家庭作业 我想知道今天处理的交易总量 为此我编写了以下代码 public decimal getDayTransaction int accountid string date s
  • 在sql server中动态生成列名

    请看下面的查询 select name as Employee Name from table name 我想生成 Employee Name 动态地基于其他列值 这是示例表 s dt dt01 dt02 dt03 2015 10 26 I
  • SQL Server 2016-临时表-如何识别用户

    是否可以获得有关修改历史表中数据的用户 连接的信息 我读到了审计场景 其中我可以使用时态表 并且可以检测谁更改了数据 但我怎样才能做到这一点呢 一个看似无懈可击的审核解决方案 它给出了进行每个更改的登录用户的名称 并且对我的之前的回答 ht
  • SQL Server - 即使在回滚的情况下如何确保标识字段正确增加

    在 SQL Server 中 如果涉及插入新行的事务被回滚 则标识字段中的数字将被跳过 例如 如果Foos表是99 然后我们尝试插入一个新的Foo记录但回滚 然后 ID 100 被 用完 下一个Foo行编号为 101 有什么方法可以改变这种
  • 不要因 HTTP 错误 403 而停止

    在我的 Selenium 测试用例之一中 我尝试确保某些页面无法访问 相反 应给出 HTTP 返回代码 403 然而 这里 Selenium 终止测试执行 但出现以下异常 com thoughtworks selenium Selenium
  • SQL Server 'FETCH FIRST 1 ROWS ONLY' 无效使用

    我正在尝试将 Db2 查询转换为 SQL Server 我遇到了一个我不熟悉的构造 仅 FETCH FIRST 1 ROWS 这是在 db2 上运行的查询 select from products series where state xx
  • 如何在 BigQuery/SQL 中将行转置为包含大量数据的列?

    我在将 BigQuery 中的大量数据表 15 亿行 从行转置为列时遇到问题 我可以弄清楚如何在硬编码时使用少量数据来完成此操作 但是对于如此大量的数据 该表的快照如下所示 CustomerID Feature Value 1 A123 3
  • SQL Server 文本数据类型最大长度 = 65,535?

    我正在使用的软件使用文本字段来存储 XML 根据我的在线搜索 文本数据类型应该包含 2 31 1 个字符 目前 SQL Server 每次都会将 XML 截断为 65 535 个字符 我知道这是由 SQL Server 引起的 因为如果我直
  • T-SQL 插入或更新

    我有一个关于 SQL Server 性能的问题 假设我有一张桌子persons包含以下列 id name surname 现在 我想在此表中插入一个新行 规则如下 If id表中不存在 则插入该行 If id存在 然后更新 我这里有两个解决
  • SQL:删除SQL Server中的重复记录

    我有一个 sql server 数据库 我预先加载了大量数据行 不幸的是 数据库中没有主键 并且表中现在存在重复信息 我不担心没有主键 但我担心数据库中有重复项 有什么想法吗 原谅我是一个sql server新手 嗯 这就是表上应该有主键的

随机推荐

  • jQuery SVG,为什么我不能 addClass?

    我正在使用 jQuery SVG 我无法向对象添加或删除类 有人知道我的错误吗 The SVG
  • 同步两个RichTextBox的滚动位置?

    在我的申请表中 我有两个RichTextBox对象 它们的文本行数始终相同 我想 同步 这两者之间的垂直滚动 以便当用户更改其中一个的垂直滚动位置时 另一个滚动相同的量 我该怎么做呢 感谢杰伊的回答 经过更多搜索 我也找到了所描述的方法he
  • Formik + 是的:如何在安装时立即验证表单?

    我想在安装表单时显示字段错误 提交后不行 Yup const validation Yup object shape field Yup string required Required Formik
  • golang中星号(*struct)表示法是什么意思

    NewReaderSize returns a new Reader whose buffer has at least the specified 43 size If the argument io Reader is already
  • geom_area 绘图默认堆叠区域

    我在用geom area绘制一个非常简单的数据集 绘图时使用geom line一切正常 但是当我切换到geom area绘制更高的值 我认为查看图表是代表我的问题的最佳方式 require tidyverse x lt structure
  • 在 CPanel 中编辑 DNS 记录的 PHP 脚本

    我想变得自给自足 因此不需要 DNSDynamic 和 DYNDNS 等服务 而且我不喜欢为我自己可以做的服务付费 场景如下 我的主网站由托管公司托管 我还有一个家庭服务器 上面有我的音乐等 但问题是我的 ISP BT 不向消费者提供静态
  • 确保第一个 ajax 函数在第二个之前完成

    我有一个 JavaScript 函数 它使用 jQuery 发出两个连续的 Ajax 请求 我想确保在调用第二个函数之前第一个请求已加载 我有办法做到这一点吗 要么指定async false in the ajax选项 或者进行第二个 aj
  • 样式图标标记 - 融合表

    这是为像我这样的其他新手提供的帮助 我花了很长时间才弄清楚如何在我的融合表项目中将不同的图标分配给不同类别的标记 我发现文档有限且令人困惑 我想如果我感到困惑 那么其他人可能也会如此 在其他人的帮助和大量测试的帮助下 我现在可以与您分享两种
  • JMeter、JUnit 和 Spring Java 配置

    是否可以使用 JUnit 插件 采样器和 Spring Java 配置来运行 JMeter 当我尝试执行此操作时 未创建 Spring 自动装配 bean 尽管测试用例运行 但由于尚未创建 bean 我收到了空指针异常 我正在使用Sprin
  • 如何从 char 数组进行转换 [char; N] 到字符串切片 &str?

    给定一个固定长度char数组如 let s char 5 h e l l o 我如何获得 str 你不能没有一些分配 这意味着你最终会得到一个String let s2 String s iter collect 问题是 Rust 中的字符
  • 如何修复我的包中的“.dist-info 目录未找到”?

    我有一个 Python 2 软件包 我正在尝试将其升级到 Python 3 它是由曾经在我现在所在的同一团队工作的某个人编写的 但他已不再在公司工作 不幸的是 没有人离开公司团队能够提供帮助 对包的文件运行 2to3 后 我运行python
  • R匹配2个以上条件并返回响应值

    您好 我有两个数据集 其中第一个是一组索引 ind1 lt rep c E W times 20 ind2 lt sample 100 150 40 y lt c 1 40 index lt data frame cbind ind1 in
  • 如果内存大小相等,如何将 C 结构体转换为另一种结构体类型?

    我有 2 个矩阵结构意味着相同的数据 但具有不同的形式 如下所示 Matrix type 1 typedef float Scalar typedef struct Scalar e 4 Vector typedef struct Vect
  • 该字符串未被识别为有效的日期时间。有一个从索引 0 开始的未知单词

    我有以下 C 在尝试将字符串解析为日期时间时出现上述错误 DateTime backupdate System Convert ToDateTime imageflowlabel Text DateTime currentdate Syst
  • gTTS直接输出

    我想让聊天机器人做出回应audio和文字 所有使用 gTTS 的示例代码似乎都需要 将文本保存到文件中 然后播放该文件 是否有另一种方法可以简化流程 例如使用 gTTS 自动播放 聊天机器人的响应 如果你简单地看一下the docs 您会看
  • 悬停时开始和暂停 SVG 动画

    当用户将鼠标悬停在以下 SVG 上时 我想对齿轮进行动画处理 也就是说 当鼠标进入时 两个齿轮都开始从它们停止的地方旋转 当鼠标离开时 齿轮会停止在它们所在的任何位置 如果可能的话 我希望动画使用缓入 缓出功能开始和结束 如何使用 SVG
  • 使用 sf 在 R 中求多边形的交集

    我想通过查看 400m 步行 5 分钟 内其他点的数量来评估每个点与其他等效点的空间接近程度 我在地图上有一些点 我可以在它们周围画一个简单的 400 m 缓冲区 我想确定哪些缓冲区重叠 然后计算重叠的数量 这个重叠数应该与原始点相关 这样
  • Tensorflow 跨设备通信

    正如tensorflow论文所述 Tensorflow的跨设备通信是通过在设备中添加 接收节点 和 发送节点 来实现的 根据我的理解 设备 请考虑仅涉及CPU设备 负责执行操作的计算 然而 数据 例如 操作产生的张量 变量缓冲区 驻留在内存
  • 无法使用 ServerSocket.socketBind 分配请求的地址

    当我尝试设置套接字服务器时 收到一条错误消息 Exception in thread main java net BindException Cannot assign requested address JVM Bind at java
  • 用户定义函数中的错误处理

    我想在 SQL Server 2005 中编写一个非 CLR 用户定义函数 该函数接受输入字符串并返回输出字符串 如果输入字符串无效 那么我想向调用者指示错误 我的第一个想法是使用 RAISERROR 来引发异常 但是 SQL Server