是否可以使用C# 中的LEAD或LAGSQL 函数?
我更喜欢的方法是:
我知道可以通过方法 5 完成,但是方法 1 到 4 呢?
我试图在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函数时性能是否会下降STRICT。我在这里回答问题时偶然发现了这种现象。
为了演示这种效果,我创建了一个简单SQL函数的两个变体,该函数以升序对数组的两个元素进行排序。
-- temporary table with 10000 random pairs of integer
CREATE TEMP TABLE arr (i int[]);
INSERT INTO arr
SELECT ARRAY[(random() * 1000)::int, (random() * 1000)::int]
FROM generate_series(1,10000);
Run Code Online (Sandbox Code Playgroud)
带STRICT修饰符的功能:
CREATE OR REPLACE FUNCTION f_sort_array1(int[]) RETURNS int[] AS
$$
SELECT CASE WHEN $1[1] > $1[2] THEN ARRAY[$1[2], $1[1]] ELSE $1 END;
$$ LANGUAGE sql STRICT IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)
没有STRICT修饰符的功能(否则相同):
CREATE OR REPLACE FUNCTION f_sort_array2(int[]) RETURNS int[] AS
$$
SELECT CASE WHEN $1[1] > …Run Code Online (Sandbox Code Playgroud) 我有一个作者的全名列,并希望将姓氏提取到另一列.我使用以下原始SQL执行此操作:
SELECT name,
SUBSTRING_INDEX(`name`, ' ', -1) AS `surname`
FROM qr.authors;
Run Code Online (Sandbox Code Playgroud)
输出:

在"使用SQL函数"下,Cookbook说:
除了上述函数之外,func()方法还可用于创建任何通用SQL函数,如year,date_format,convert等.
但是如何通过func()方法创建这个SUBSTRING_INDEX函数,以便我可以将它与CakePHP查询构建器一起使用?
我在 SQL Server 中创建了一个函数来执行动态 SQL 查询并返回一个值。在 SQL 查询中调用函数时出现错误:
只能从函数内部执行函数和一些扩展存储过程
功能:(返回与@ModuleName 关联的用户数)
DECLARE @Query NVARCHAR(MAX)
DECLARE @Result int
DECLARE @UsersUsingModule AS NVARCHAR(99)
SET @Query = 'SELECT @UsersUsingModule = Count(UR.UserId) '+
'FROM '+@UserDBName+'.[dbo].[aspnet_UsersInRoles] AS UR '+
'INNER JOIN '+@UserDBName+'.[dbo].[aspnet_Roles] AS R ON UR.RoleId = R.RoleId '+
'INNER JOIN '+@UserDBName+'.[dbo].[aspnet_Users] AS U ON UR.UserId = U.UserId '+
'WHERE LOWER(RoleName) IN ( '+
'SELECT LOWER([Role]) '+
'FROM ADMIN_ROLEACCESS '+
'WHERE LOWER(ModuleName) = LOWER(@ModuleName) '+
')'
EXEC sp_executesql @Query, N'@ModuleName nvarchar(max), @UsersUsingModule INT OUTPUT', @ModuleName, …Run Code Online (Sandbox Code Playgroud) 我只是想创建一个返回select语句的函数,但它给出了错误:
带有返回值的RETURN语句不能在此上下文中使用.
这是我的代码:
CREATE FUNCTION [dbo].[Sample] (@SampleValue int)
RETURNS TABLE
AS
BEGIN
RETURN(
SELECT * FROM View_sls
)
Run Code Online (Sandbox Code Playgroud)
请让我知道解决方案
我正在尝试连接许多列并用逗号分隔,如下所示:
Column
------
abc
bcd
bgd
abc
Run Code Online (Sandbox Code Playgroud)
预期输出: abc,bcd,bgd
我正在使用此代码:
CREATE FUNCTION concatinate(@PK uniqueidentifier)
RETURNS varchar(max)
AS
BEGIN
DECLARE @result varchar(max)
SELECT @result = ISNULL(@result + ', ', '') + Column
FROM table
Run Code Online (Sandbox Code Playgroud)
我得到的结果是
abc,bcd,bgd,abc
Run Code Online (Sandbox Code Playgroud)
我不能只选择不同的值。请指导。
如何在sql中将多个dateformat更改为一个dateformat?
目前,我正在使用我的java代码.但是,我想改变使用sql函数,这样我就不需要在我的java程序和数据库之间使用另一个连接.
我目前的代码如下:
-
任何指针都会受到赞赏
schemaname.tablename在我的 postgres 函数中,我对其中的对象(如表和其他函数)使用完全限定名称(例如)。
但在几乎所有情况下,我指的是与函数本身的架构具有相同架构的对象。如何让 postgres 函数知道默认使用与为其中的对象定义的模式相同的模式?
这样我就可以有一个schema_a.myfunctionthat 引用mytable但它将解析为schema_a.mytable,以及一个schema_b.myfunctionthat 也引用mytable但它将解析为schema_b.mytable。
我怎样才能这样设置呢?通过使重构和重命名模式变得容易,它确实可以简化事情。我在许多模式中具有相同的表名,因此不幸的是我必须在所有函数中使用完全限定名称。
这意味着如果我更改模式名称之类的内容,我需要重命名所有 postgres 函数中出现的所有schema_a.to 。schema_new.我想知道是否有更好的方法,因为有时这可能很容易出错(我可能会错过替换或替换我不应该替换的东西)。
sql-function ×10
sql ×5
postgresql ×3
sql-server ×3
performance ×2
azure-devops ×1
c# ×1
cakephp ×1
cakephp-3.0 ×1
java ×1
select ×1
strict ×1
t-sql ×1
where-clause ×1