这是我理想的想法.想象一下,我有一个A行的表.
我想要做:
SELECT A, func(A) FROM table
Run Code Online (Sandbox Code Playgroud)
并为输出说4列.
有没有办法做到这一点?我已经看到了自定义类型或任何可以让你得到一个看起来像的结果的东西
A B C D)
但是,如果我能让一个函数返回多个列而不再进行重新分析,那将会非常棒.
有没有什么可以做这样的事情?
我在SQL Server 2012中有一个表,如快照所示:

然后我使用Last_Value()和First Value来获取不同YearMonth的每个EmpID的AverageAmount.脚本如下:
SELECT A.EmpID,
First_Value(A.AverageAmount) OVER (PARTITION BY A.EmpID Order by A.DimYearMonthKey asc) AS '200901AvgAmount',
Last_Value(A.AverageAmount) OVER (PARTITION BY A.EmpID Order by A.DimYearMonthKey asc) AS '201112AvgAmount'
FROM Emp_Amt AS A
Run Code Online (Sandbox Code Playgroud)
但是,此查询的结果是:

在"201112AvgAmount"列中,它显示每个EmpID的不同值,而"200901AvgAmount"具有正确的值.
我的SQL脚本有什么问题吗?我在网上做了很多研究,但仍然找不到答案....
是否有mySQL函数将格式dd.mm.yy转换为YYYY-MM-DD?
例如,03.09.13 -> 2013-09-03.
昨天我们得到了一个必须获得a类型的场景,db field并且我们必须编写该字段的描述.喜欢
Select ( Case DB_Type When 'I' Then 'Intermediate'
When 'P' Then 'Pending'
Else 'Basic'
End)
From DB_table
Run Code Online (Sandbox Code Playgroud)
我建议编写一个db函数而不是这个case语句,因为它更可重用.喜欢
Select dbo.GetTypeName(DB_Type)
from DB_table
Run Code Online (Sandbox Code Playgroud)
有趣的是,使用数据库的功能将是一个说我们的开发人员的效率低下的database functions是慢比Case statement.我通过互联网搜索找到答案,这是效率方面更好的方法但不幸的是我发现没有什么可以被认为是满意的答案.请用你的想法赐教,哪种方法更好?
如果将表的列设置为其公式调用函数的计算列,则更改该基础函数将变得很痛苦.每次更改时,您必须找到每个引用该函数的公式的列,删除引用,保存表,更改函数,添加所有内容,然后重新保存.即使很小的变化也是噩梦.
您能否告诉SQL Server您不关心公式引用函数并继续更改基础函数?
其他详细信息:计算列不会被FK约束持久化或引用,因为它是非确定性的.该功能考虑了当前时间.它正在处理记录是否过期的问题.
sql-server-2005 calculated-columns sql-function non-deterministic
我正在尝试创建一个SQL函数,用于测试参数是以某个术语开头还是包含该术语,但不是以它开头.
基本上,如果参数以term开头,则函数返回0.否则返回1.
这是我所拥有的函数的骨骼,我正在尝试从我发现的另一个函数中进行调整:
CREATE FUNCTION [dbo].[fnGetRelevance]
(
@fieldName nvarchar(50),
@searchTerm nvarchar(50)
)
RETURNS @value int -- this is showing an error, it seems to expect table but all I want is an int
(
-- does this need to be here? If so, what should it be?
)
AS
BEGIN
declare @field TABLE(Data nvarchar(50))
insert into @field
select Data from @fieldName
if (Data like @searchTerm + '%') -- starts with
begin
return 0
end
else if (Data like '%' + …Run Code Online (Sandbox Code Playgroud) 在PostgreSQL中,就其目的,优点和缺点而言,预准备语句与SQL或PL/pgSQL函数之间有什么区别?我们什么时候用哪个?
在这个非常简单的例子中,它们是否正常工作,对吗?
CREATE TABLE foo (id INT, name VARCHAR(80));
CREATE FUNCTION myfunc1(INT, VARCHAR(80)) RETURNS void AS '
INSERT INTO foo VALUES ($1, $2);
' LANGUAGE SQL;
SELECT myfunc1(3, 'ben');
CREATE FUNCTION myfunc2(INT, VARCHAR(80)) RETURNS void AS '
BEGIN
INSERT INTO foo VALUES ($1, $2);
END' LANGUAGE plpgsql;
SELECT myfunc2(3, 'ben');
PREPARE fooplan (INT, VARCHAR(80)) AS
INSERT INTO foo VALUES($1, $2);
PREPARE
EXECUTE fooplan(3, 'ben');
Run Code Online (Sandbox Code Playgroud) 我的应用程序是c#MVC5,使用EF 6.1.使用Database First导入的表和函数.我可以在DALModel.Store/Stored Procedures/Functions(灰显)下列出的模型(emdx)浏览器中看到该功能.
我试图使用以下功能:
using (var ctx = new DALEntities())
{
int? result = ctx.fn_TotalClient(MemberRepository.AllowedCId, fromDate, toDate);
return (result != null ? result.Value : 0);
}
Run Code Online (Sandbox Code Playgroud)
我得到无法解析fn_TotalClient
非常感谢您的建议.
我试图在where子句中使用函数执行的结果,但没有成功:
SELECT clinics.*, distance_between_objects(1, id, 7, 3) AS dist FROM clinics WHERE dist<=1;
Run Code Online (Sandbox Code Playgroud)
给我:Column "dist" does not exists。引用它就像:
SELECT clinics.*, distance_between_objects(1, id, 7, 3) AS dist FROM clinics WHERE "dist"<=1;
Run Code Online (Sandbox Code Playgroud)
也没有帮助。请告知Postgres是否有可能在WHERE子句中使用函数结果而不调用它两次?谢谢!
我已将所有 SQL 文件签入 Azure DevOps 上的存储库中。我的命名约定允许我知道哪些 .sql 文件被其他 .sql 文件使用(例如,文件创建一个由存储过程使用的视图)。我想强制使用存储库来跟踪代码更改,并且不希望使用 dacpac 文件。我希望每个函数/视图/存储过程都有它自己的文件。
我的问题是,如何从天蓝色管道对数据库执行与“ ..\Functions\BASE_*.sql ”匹配的所有 .sql 文件?我尝试了以下方法,但不支持多个文件匹配。有更好的选择吗?我需要编写循环脚本并自己完成吗?
# pipeline
trigger:
- master
pool:
vmImage: 'windows-latest'
steps:
- task: SqlDacpacDeploymentOnMachineGroup@0
inputs:
TaskType: 'sqlQuery'
SqlFile: '$(System.DefaultWorkingDirectory)\Functions\BASE_*.sql'
ServerName: '$(SQL_ServerName).database.windows.net'
DatabaseName: '$(SQL_DatabaseName)'
AuthScheme: 'sqlServerAuthentication'
SqlUsername: '$(SQL_UserName)'
SqlPassword: '$(SQL_Password)'
Run Code Online (Sandbox Code Playgroud)
我收到的错误是:
Starting: SqlDacpacDeploymentOnMachineGroup
==============================================================================
Task : SQL Server database deploy
Description : Deploy a SQL Server database using DACPAC or SQL scripts
Version : 0.3.23
Author : Microsoft Corporation
Help : https://learn.microsoft.com/azure/devops/pipelines/tasks/deploy/sql-dacpac-deployment-on-machine-group
==============================================================================
##[error]Found more …Run Code Online (Sandbox Code Playgroud) sql-function ×10
sql ×4
postgresql ×3
sql-server ×3
plpgsql ×2
t-sql ×2
asp.net-mvc ×1
azure-devops ×1
c# ×1
date ×1
format ×1
mysql ×1
select ×1
where-clause ×1