相关疑难解决方法(0)

SQL Server中的标量,表值和聚合函数之间的区别?

SQL Server中的标量值,表值和聚合函数有什么区别?从查询中调用它们需要一种不同的方法,还是以同样的方式调用它们?

t-sql sql-server sqlclr function aggregate-functions

47
推荐指数
2
解决办法
4万
查看次数

表值函数导致我的查询性能下降

今天我有一个可怕的时间试图获得一个查询来执行我期望的方式.我不得不对昨天存在于查询中的表值函数稍作修改,并且该更改对查询产生了巨大的性能影响.在评估执行计划并查看统计信息IO和时间后,我发现由于我更改了函数以返回表变量而不仅仅是结果集,因此它正在对正在查询的其中一个表执行完全扫描.

我的问题是为什么让它返回表(TableVariable)而不仅仅是选择/结果集导致计划发生如此大的变化?

难倒....

sql-server sql-server-2005 sql-server-2008

22
推荐指数
3
解决办法
3万
查看次数

使用with vs声明一个临时表:性能/差异?

我在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 t-sql performance sql-server-2008

16
推荐指数
2
解决办法
8万
查看次数

在sql函数中声明变量

我有一个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 sql-server-2005

7
推荐指数
3
解决办法
4万
查看次数

在早期版本上创建用户定义的函数,例如 SQL Server 2017 STRING_AGG

我尝试创建一个通用函数,可以像在 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相关吗?

sql-server user-defined-functions string-aggregation

5
推荐指数
1
解决办法
9728
查看次数

创建函数SQL Server 2012时出错

我正在创建一个函数,所以我可以获取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)

sql sql-server

-6
推荐指数
1
解决办法
116
查看次数