SQL Server中的标量值,表值和聚合函数有什么区别?从查询中调用它们需要一种不同的方法,还是以同样的方式调用它们?
今天我有一个可怕的时间试图获得一个查询来执行我期望的方式.我不得不对昨天存在于查询中的表值函数稍作修改,并且该更改对查询产生了巨大的性能影响.在评估执行计划并查看统计信息IO和时间后,我发现由于我更改了函数以返回表变量而不仅仅是结果集,因此它正在对正在查询的其中一个表执行完全扫描.
我的问题是为什么让它返回表(TableVariable)而不仅仅是选择/结果集导致计划发生如此大的变化?
难倒....
我在SQLServer 2008中创建了一个sql函数,它声明了一个临时表,并使用它来计算内部值的移动平均值
declare @tempTable table
(
GeogType nvarchar(5),
GeogValue nvarchar(7),
dtAdmission date,
timeInterval int,
fromTime nvarchar(5),
toTime nvarchar(5),
EDSyndromeID tinyint,
nVisits int
)
insert @tempTable select * from aces.dbo.fEDVisitCounts(@geogType, @hospID,DATEADD(DD,-@windowDays + 1,@fromDate),
@toDate,@minAge,@maxAge,@gender,@nIntervalsPerDay, @nSyndromeID)
INSERT @table (dtAdmission,EDSyndromeID, MovingAvg)
SELECT list.dtadmission
, @nSyndromeID
, AVG(data.nVisits) as MovingAvg
from @tempTable as list
inner join @tempTable as data
ON list.dtAdmission between data.dtAdmission and DATEADD(DD,@windowDays - 1,data.dtAdmission)
where list.dtAdmission >= @fromDate
GROUP BY list.dtAdmission
Run Code Online (Sandbox Code Playgroud)
但我也发现你可以像这样声明tempTable:
with tempTable as
(
select * from …Run Code Online (Sandbox Code Playgroud) 我有一个sql函数,我需要在该函数中声明几个变量.请告诉我如何实现这一目标.
例如,我需要把 - >
Declare @ClientResult TABLE(
RowIndex int identity(1,1),
SplitText varchar(50)
)
Run Code Online (Sandbox Code Playgroud)
在下面的功能.
create FUNCTION [dbo].CLIENT_SHIPPINGREPORTDATA_Function_Test
(
@CLIENTPK_NEW TABLE,
@CGNEEPK TABLE
@type varchar(100)
)
RETURNS TABLE
AS
RETURN
SELECT distinct
OP_PartNum,
OP_PK
FROM Client_whsPallet pallet
Run Code Online (Sandbox Code Playgroud)
我正在使用sql server 2005
谢谢
我尝试创建一个通用函数,可以像在 SQL Server 2017 上使用新的 string_agg 内置函数的示例一样使用
内部实现可以类似于以下内容
with tbl as(
select a.Id, c.Desc
from TableA a
join TableB b on b.aId = a.Id
join TableC c on c.Code = b.bCode
)
select distinct ID
, STUFF(( select ', ' + Desc from tbl t where t.ID = tbl.ID
for xml path(''),TYPE).value('.','VARCHAR(MAX)'),1,2,'') Desc
from tbl
Run Code Online (Sandbox Code Playgroud)
但是如何接收字段键、要连接的字段、分隔符和范围选择上下文呢?Inline与或Multi-Statement Table-Valued Functions相关吗?
我正在创建一个函数,所以我可以获取select语句的结果并将它们放在我们数据库的视图中.我运行它时,我的SELECT语句返回一个结果,但是当我去创建一个函数时,我得到错误:
Only one expression can be specified in the select list when the
subquery is not introduced with EXISTS.
Run Code Online (Sandbox Code Playgroud)
我仍然是新人并且学习并且会感谢我在做错的任何帮助.
CREATE FUNCTION CXi_Application
@Application nvarchar(255), @Wave nvarchar(255)
RETURNS int
AS
BEGIN
DECLARE @Return int
SET @Return =
(SELECT @Application, (
(sum(CASE WHEN overall_score IN (1) THEN 1 ELSE 0 END) + sum(CASE WHEN effective_score IN (1) THEN 1 ELSE 0 END) + sum(CASE WHEN easeuse_score IN (1) THEN 1 ELSE 0 END)) +
(sum(CASE WHEN overall_score IN (2) THEN 2 …Run Code Online (Sandbox Code Playgroud)