Questions tagged «functions»

函数执行某些指定的工作,通常以参数为输入。就数据库而言,它们可能特定于SQL或数据库供应商。

10
如何在标准SQL或T-SQL中生成1、2、3、3、2、1、1、2、3、3、2、1…系列?
给定两个数字n和m,我想生成一系列的表格 1, 2, ..., (n-1), n, n, (n-1), ... 2, 1 并重复m一次。 例如,对于n = 3和m = 4,我需要以下24个数字组成的序列: 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1, 1, 2, 3, 3, 2, 1 ---------------- ---------------- ---------------- ---------------- 我知道如何通过两种方法之一在PostgreSQL中实现此结果: 使用以下查询,该查询使用该generate_series函数,以及一些技巧以确保顺序正确: WITH parameters (n, …

2
PostgreSQL:将表作为函数中的参数传递
我TYPE在PostgreSQL中发现。我有TABLE TYPE一些表必须尊重(接口)。例如: CREATE TYPE dataset AS( ChannelId INTEGER ,GranulityIdIn INTEGER ,GranulityId INTEGER ,TimeValue TIMESTAMP ,FloatValue FLOAT ,Status BIGINT ,QualityCodeId INTEGER ,DataArray FLOAT[] ,DataCount BIGINT ,Performance FLOAT ,StepCount INTEGER ,TableRegClass regclass ,Tags TEXT[] ,WeightedMean FLOAT ,MeanData FLOAT ,StdData FLOAT ,MinData FLOAT ,MaxData FLOAT ,MedianData FLOAT ,Percentiles FLOAT[] ); 我可以使用以下模板创建表格: CREATE TABLE …


1
带函数调用的估计查询计划与实际查询计划
我在SQL Server上有此查询,这是一个合并复制查询: SELECT DISTINCT b.tablenick, b.rowguid, c.generation, sys.fn_MSgeneration_downloadonly ( c.generation, c.tablenick ) FROM #belong b LEFT OUTER JOIN dbo.MSmerge_contents c ON c.tablenick = b.tablenick AND c.rowguid = b.rowguid; 估计的查询计划包括有关3个查询的信息: 上面的查询 函数调用fn_MSgeneration_downloadonly 对fn_MSArticle_has_downloadonly_property的函数调用 实际的查询计划仅包含以下信息: 上面的查询 与功能无关。为什么实际计划中缺少功能信息? 我尝试了以下选项: SET STATISTICS PROFILE ON SET STATISTICS XML ON 它创建了一个实际计划,但缺少第2部分和第3部分,与我在Management Studio中使用实际查询计划选项时相同。 例如,如果我要使用Profiler捕获有关函数调用的信息,我将选择哪些事件? 找不到与查询计划特别相关的答案,但我分析了SP:StmtStarting和SP:StmtCompleted并显示了函数调用。

8
标识列或UDF显式生成唯一ID?
我正在就是否最好PRIMARY KEY使用Identity Columns(我们明确使用生成唯一ID的UDF)进行辩论。 我在为“身份栏”争论。 他说,我的搭档正在争吵手动生成值 通过将UDF放在另一个可以放置UDF的桌子上 锁定资源 用一个称为ID_Value的字段递增ID表1 使用它作为全局唯一标识符 或者id+1在插入时让表格做一个 在没有标识约束的服务器和/或环境之间移动数据更容易;从一个有数据的数据库移动到另一个具有类似暂存数据或虚拟数据的类似数据库。对于非生产中的测试,我们可能希望将昨天的所有记录拉到暂存阶段进行测试。 哪种实现更有意义?

3
将标量函数转换为TVF函数以并行执行-仍在串行模式下运行
发布后,我的一个查询正在串行执行模式下运行,我注意到在视图中使用了两个新功能,该视图在从应用程序生成的LINQ to SQL Query中引用。因此,我将那些SCALAR函数转换为TVF函数,但查询仍在串行模式下运行。 早些时候,我在其他一些查询中将标量转换为TVF,它解决了强制串行执行的问题。 这是标量函数: CREATE FUNCTION [dbo].[FindEventReviewDueDate] ( @EventNumber VARCHAR(20), @EventID VARCHAR(25), @EventIDDate BIT ) RETURNS DateTime AS BEGIN DECLARE @CurrentEventStatus VARCHAR(20) DECLARE @EventDateTime DateTime DECLARE @ReviewDueDate DateTime SELECT @CurrentEventStatus = (SELECT cis.EventStatus FROM CurrentEventStatus cis INNER JOIN Event1 r WITH (NOLOCK) ON (cis.Event1Id = r.Id) WHERE (r.EventNumber …

2
对Parallel Scalar UDF的支持是否合理?
相当有据可查的是,标量UDF强制执行总体串行计划。 并行运行功能 鉴于大量行进入必须计算UDF的管道中的某个点,为什么引擎不能只在处理器之间分配它们呢?如果UDF中没有状态,则顺序无关紧要。 有人声称UDF是黑匣子,必须使用游标。我可以看到,在两次迭代之间保持某种状态的情况下,用户游标无法在SP内并行化,但是看起来应该可以并行化。 解释引擎为何强制整个计划按顺序进行而不是仅由UDF计算阶段进行的加分。 对并行UDF的支持是否是要求的合理功能?

2
使用PL / pgSQL函数返回记录-加快查询速度
我有一个用Perl编写的非分叉游戏守护进程,该守护进程使用acync查询将玩家统计信息写入PostgreSQL 9.3数据库。但是,当我需要从数据库中读取某些内容时(例如,如果某个播放器被禁止或该播放器具有VIP状态),那么我将使用同步查询。 这使游戏停止片刻,直到从数据库中读取了该值。 我无法重写游戏守护进程以使用异步查询来读取值(我尝试过,但是需要太多更改),所以我的问题是:合并几个不相关的查询(当一个新玩家使用时,我需要进行查询)是否有意义连接)到1过程,我如何同时向我的Perl程序返回几个值? 我当前的所有查询都以玩家ID作为参数并返回1值: -- Has the player been banned? select true from pref_ban where id=? -- What is the reputation of this player? select count(nullif(nice, false)) - count(nullif(nice, true)) as rep from pref_rep where id=? -- Is he or she a special VIP player? select vip > now() …

3
将公式存储在表中并在函数中使用该公式
我有一个PostgreSQL 9.1数据库,其中部分处理代理佣金。每个代理商都有自己的计算公式,他们可以得到多少佣金。我有一个函数来生成每个代理应获得的佣金数量,但是随着代理数量的增加,它变得无法使用。被迫做一些非常长的case语句和重复代码,这使我的功能变得非常庞大。 所有公式都有常量变量: d ..该月工作的天数 r ..新节点累积 l ..忠诚度得分 s ..子代理人佣金 b ..基本利率 我..获得的收入 公式可以是: d*b+(l*4+r)+(i/d)+s 每个代理商与人力资源部门协商付款方式。因此,我可以将公式存储在代理表中,然后像一个小的函数一样,仅从表中获取公式并将其转换为值并计算金额吗?

5
T SQL表值函数,以逗号分隔列
我在Microsoft SQL Server 2008中编写了一个表值函数,以数据库中的逗号分隔列为每个值吐出单独的行。 例如:“一,二,三,四”将返回一个只有一个包含以下值的列的新表: one two three four 你们这些代码看起来容易出错吗?当我用 SELECT * FROM utvf_Split('one,two,three,four',',') 它永远运行,永不返回任何东西。尤其是因为MSSQL服务器上没有内置的拆分功能(为什么为什么为什么?!),而我在网络上发现的所有类似功能都是绝对的垃圾,或者与我要执行的操作无关。 这是函数: USE *myDBname* GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[utvf_SPlit] (@String VARCHAR(MAX), @delimiter CHAR) RETURNS @SplitValues TABLE ( Asset_ID VARCHAR(MAX) NOT NULL ) AS BEGIN DECLARE @FoundIndex INT DECLARE @ReturnValue …

1
计算列中使用的标量函数,更新函数的最干净方法是什么?
我想在我们的数据库中更新一个标量函数。该函数用于键表中的多个计算列,因此如果尝试更新它,则会出现依赖项错误。我可以显式删除列,更新函数并重新添加列,但是,如果没有很多多余的幻想,那将改变列顺序,并可能产生其他意想不到的后果。我想知道是否有一种更清洁的方法?

1
接收字符输入和返回日期格式的函数(输入错误)
我需要编写一个函数来接收字符串字符并返回日期格式。例如输入是20120101,我需要这个2012-01-01。问题是可能有一些不正确的输入,例如“ 2012ABCD”。在这种情况下,我希望函数返回固定日期,例如2020-01-01。到目前为止,我写的是: Create Function ReturnDate (@date varchar(8)) Returns date as begin declare @result date set @result = (select convert(date , @date,111)) if(@@ROWCOUNT>0) return @result else return '2020-01-01' return @result end 这不起作用,我只是不知道如何处理第二部分(当输入不正确时)。

1
显然,我的CLR汇编函数引起了死锁?
我们的应用程序需要与Oracle数据库或Microsoft SQL Server数据库同样良好地工作。为方便起见,我们创建了一些UDF以使查询语法同质。例如,SQL Server具有GETDATE(),而Oracle具有SYSDATE。它们执行相同的功能,但它们是不同的词。我们为两个平台编写了一个名为NOW()的包装UDF,该包装将相关的平台特定语法包装在一个通用函数名称中。我们还有其他这样的功能,其中一些功能实际上什么也不做,只是为了同质化而存在。不幸的是,这对于SQL Server是有成本的。内联标量UDF严重破坏性能,并完全禁用并行性。作为替代方案,我们编写了CLR汇编函数以实现相同的目标。当我们将其部署到客户端时,他们开始遇到频繁的死锁。这个特定的客户端正在使用复制和高可用性技术,我想知道这里是否存在某种交互。我只是不了解引入CLR函数将如何导致这样的问题。作为参考,我在C#中包含了原始的标量UDF定义以及替换的CLR定义,并为其提供了SQL声明。如果有帮助,我也可以提供死锁XML。 原始UDF CREATE FUNCTION [fn].[APAD] ( @Value VARCHAR(4000) , @tablename VARCHAR(4000) = NULL , @columnname VARCHAR(4000) = NULL ) RETURNS VARCHAR(4000) WITH SCHEMABINDING AS BEGIN RETURN LTRIM(RTRIM(@Value)) END GO CLR组装功能 [SqlFunction(IsDeterministic = true)] public static string APAD(string value, string tableName, string columnName) { return value?.Trim(); } …


1
SentryOne Plan Explorer是否将UDF中的读数计数?
我有这样的查询: select dbo.fn_complexFunction(t.id) from mytable t 在SQL Sentry Plan Explorer中,我注意到我必须运行Get Estimated Plan才能使查询计划包括UDF。 运行“获取实际计划”时,似乎逻辑读取和其他指标未包括UDF中发生的操作。在这种情况下,是否是使用Profiler的唯一解决方法?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.