问题标签 [user-defined-functions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
559 浏览

vba - 未能将参数传递给 VBA for Excel 2007 中的 UDF

我有一个复杂的迭代电子表格,我想在其中使用 UDF 来计算热交换器的传热系数。该函数有 5 个参数(2 个字符串和 3 个双精度)。字符串和 1 双通就好了。剩下的两个似乎根本没有通过。对有问题的论点的观察表明它们等于零。我尝试将参数重新定义为变体,然后我可以在“value2”字段中找到我想要的值。但是,一旦我尝试访问它(通过 varName.Value2),它就会消失(手表突然将该字段列为“空”)。

为有问题的参数传递给函数的单元格在很大程度上依赖于电子表格的其余部分,并且它们的值几乎每次迭代都会改变。

有没有人见过这个并且知道解决方法?

0 投票
1 回答
1629 浏览

sql - 用户定义的函数 SQL Server 2005 被错误地标记为非确定性?

这个问题相关,我决定检查我的数据仓库中的 UDF(这在很大程度上应该是确定性的),我发现了几个不应该的。

例如:

显示在此查询中:

为什么是这样?

0 投票
2 回答
5415 浏览

sql - 如何确定从 varchar 到 datetime 的转换?

根据这个问题的传统和文档,如何使这个函数具有确定性:

或者这个(因为字符串/日期文字 - 是的,我也试过'1900-01-01'):

0 投票
2 回答
1819 浏览

sql-server - 查询计划优化器是否适用于连接/过滤的表值函数?

在 SQLSERVER 2005 中,我使用表值函数作为对大表中的子集数据执行任意聚合的便捷方式(传递日期范围或此类参数)。

我在更大的查询中使用这些作为联合计算,我想知道查询计划优化器是否在每种情况下都能很好地与它们一起工作,或者我是否最好在更大的查询中取消嵌套这样的计算。

  1. 如果有意义,查询计划优化器是否会取消嵌套表值函数?
  2. 如果没有,您建议如何避免通过手动取消嵌套而发生的代码重复?
  3. 如果是这样,你如何从执行计划中识别出来?

代码示例:

.

.

我希望样本有意义。

非常感谢您的帮助!

0 投票
11 回答
26927 浏览

sql-server - SQL Server 上的高效 ISNUMERIC() 替换?

所以我只花了 5 个小时来解决一个问题,结果不仅是由于旧的不可靠 ISNUMERIC,而且看起来我的问题只出现在ISNUMERIC声明WITH SCHEMABINDING并在存储过程中调用的 UDF 时(我有很多将它提炼成一个测试用例需要做的工作,但我首先需要的是用可靠的东西替换它)。

任何关于ISNUMERIC(). 显然,确实需要对 , 等进行变体intmoney但是人们使用的是什么(最好在 T-SQL 中,因为在这个项目中,我仅限于 SQL Server,因为这是 SQL Server 到 SQL Server 数据的大容量 SQL Server处理任务)?

0 投票
3 回答
59528 浏览

sql-server - 如何将参数传递给表值函数

我想做类似的事情

0 投票
6 回答
1515 浏览

sql - 如何从 UDF 参数提供 SELECT 语句的 FROM 子句

在我正在移植到 Web 的应用程序中,我们目前在运行时根据指定的“模板”字符串在运行时动态访问不同的表。既然我们正在迁移到 SQL 服务器,我想将执行此操作的负担移回数据库,因此我不必弄乱动态 GridView。我想编写一个表值 UDF,其中一个参数用于表名,一个用于查询 WHERE 子句。

我为我的 UDF 输入了以下内容,但显然它不起作用。有没有办法获取某种类型的 varchar 或字符串并获得可以在 FROM 子句中工作的表引用?

或获得与此概念类似的结果集的其他方式。基本上表中的所有记录都由 varchar @template 与 @code 的匹配 ProductionCode 指示。

我收到错误“必须声明表变量“@template””,因此 SQL 服务器可能是我试图从表变量中选择的东西。

编辑时:是的,我不需要在函数中执行此操作,我可以运行存储过程,我只是之前没有编写过它们中的任何一个。

0 投票
9 回答
29921 浏览

tsql - 如何跟踪 T-SQL 函数调用

我正在尝试调试一个用 T-SQL UDF(不要问)编写的相当复杂的公式评估器,它递归地(但通过中间函数间接地)调用自身,等等。

当然,我们有一个错误。

现在,使用 PRINT 语句(然后可以通过实现 InfoMessage 事件的处理程序从 ADO.NET 读取),我可以模拟存储过程的跟踪。

对 UDF 执行相同操作会导致编译时消息:

我收到了消息(PRINT 做了一些事情,比如重置@@ROWCOUNT,这在 UDF 中绝对是禁止的,但是我如何跟踪调用?我想打印出这个跟踪,这样我就可以研究它而不会因为单步执行而分心调试器中的调用...

编辑:我尝试使用 SQL Profiler(这对我来说是第一次),但我不知道要跟踪什么:虽然我可以得到跟踪以输出发送到数据库的查询,但它们是从某种意义上说是不透明的,因为我无法深入到调用的 Expression-UDF:我可以跟踪调用的实际存储过程,但未列出此过程调用的 UDF。我错过了什么吗?我猜不会...

编辑#2:尽管(自动)接受的答案确实跟踪了函数调用 - 非常有帮助,谢谢 - 它无助于找出传递给函数的参数。当然,这对于调试递归函数是必不可少的。如果我找到任何解决方案,我会发布...

0 投票
3 回答
353918 浏览

sql - 选择中的 SQL 用户定义函数

我在 SQL 中有一个名为 getBuisnessDays 的用户定义函数,它需要 @startdate 和 @enddate 并返回两个日期之间的工作日数。如何在我的选择中调用该函数?

这就是我想做的..

0 投票
4 回答
3005 浏览

sql-server-2005 - SQL Server 2005 标量 UDF 性能

我有一个表,我在其中存储纬度/经度坐标,并且我想在其中进行查询,以获取在某个点的距离内的所有记录。

该表有大约 1000 万条记录,并且在 Lat/Long 字段上有一个索引

这不需要很精确。除其他外,我正在考虑 1 度长 == 1 度纬度,我知道这不是真的,但我得到的椭圆足以达到这个目的。

对于下面的示例,假设有问题的点是 [40, 140],而我的半径(以度为单位)为 2 度。

我试过这两种方法:


1) 我创建了一个 UDF 来计算 2 点之间距离的平方,并且我在查询中运行该 UDF。

我首先按正方形进行过滤,以加快查询速度并让 SQL 使用索引,然后对其进行细化以仅将落在圆圈内的记录与我的 UDF 匹配。


2)运行查询得到正方形(与以前相同,但没有最后一行),将所有这些记录提供给我的 ASP.Net 代码,并在 ASP.Net 端计算圆(同样的想法,计算平方保存 Sqrt 调用的距离,并与我的半径的平方进行比较)。


令我惊讶的是,在 .Net 端计算圆的速度比使用 UDF 快 10 倍左右,这让我相信我在使用该 UDF 时做错了什么......

这是我正在使用的代码:

我在这里错过了什么吗?
在 SQL Server 中使用 UDF 是否应该比向 .Net 提供比所需的多 25% 的记录要快得多,还有 DataReader 的开销、进程之间的通信等等?

我在那个 UDF 中做错了什么导致它运行缓慢?
有什么办法可以改善吗?

非常感谢你!