我们在数据库中有一个函数,它搜索两个大表以查看是否存在值.这是一个非常大的查询,但它被优化为使用索引,并且通常运行得非常快.
在过去两周内,这个功能已经三次失败并且运行速度非常慢,导致死机和性能不佳.即使在低于峰值使用的时候也会发生这种情况.
使用SQL Server中的"Alter Function"重建函数似乎可以解决这个问题.一旦我们这样做,服务器使用率恢复正常,一切正常.
这使我们认为函数查询计划已经重建,并且正在考虑正确的索引,但我们不知道为什么SQL Server决定突然将查询计划更改为更糟糕的计划.
有没有人有任何想法可能导致这种行为,或如何测试它,或阻止它?我们正在运行SQL Server 2008 Enterprise.
当我运行这个查询时,我得到了预期的结果,即一个UNIQUEIDENTIFIER:
select top 1 ec.NewValue from Events e
join EventChanges ec on e.Id = ec.EventId
where e.EntityChangedId = 'aceaea4b-e4d1-45ea-84f7-8ecda1a0b20e'
and ec.FieldChanged = 'Company.CallFrequencyId'
and e.EventDate <= '2022-07-11 15:32:00.0000000 +00:00'
order by e.EventDate desc
Run Code Online (Sandbox Code Playgroud)
但是,当我创建一个包含完全相同的查询的函数并调用它时,我得到NULL:
CREATE FUNCTION [dbo].[GetCallFrequencyIdAtDate](@companyId VARCHAR, @date DATETIME2)
RETURNS VARCHAR
AS BEGIN
RETURN (
select top 1 ec.NewValue from Events e
join EventChanges ec on e.Id = ec.EventId
where e.EntityChangedId = @companyId
and ec.FieldChanged = 'Company.CallFrequencyId'
and e.EventDate <= @date
order by e.EventDate desc …Run Code Online (Sandbox Code Playgroud) 我有一个橄榄球数据库+球员表。在玩家表中,我有表现,我想将表现表示为
我不知道该列应该是什么数据类型。做到这一点的公式或函数是什么?
请帮忙
我想创建一个T-SQL函数,向其发送表名和列名,并获取此列的最大值.
我写了一个这样的函数:
CREATE FUNCTION getMaxValue
(@TableName nvarchar(30),@FieldName nvarchar(30))
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @SqlString nvarchar(MAX)
--declare @Result nvarchar(MAX)
SET @SqlString = ' select max( ' + @FieldName + ') from ' + @TableName
RETURN EXEC(@SqlString)
END
Run Code Online (Sandbox Code Playgroud)
但我不能使用EXEC的SET,SELECT或者RETURN在这个函数中.
请帮我解决这个问题.