首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您将如何使此函数在任何表上工作?

您将如何使此函数在任何表上工作?
EN

Database Administration用户
提问于 2018-06-01 14:47:03
回答 3查看 160关注 0票数 4

我试图打破所有使用stuff函数进行数据库化的规则。为了科学,我想把每一个合适的行都划成一排,你知道吗?

问题是,我每次都要写一个新函数。它们看起来是这样的:

代码语言:javascript
复制
    ALTER function [dbo].[stuffMeds](@VisitID varchar(55))
    returns varchar(max)

    as
    begin
    declare @string varchar(max)

    set @string = (select stuff( (
    select  distinct top 500 ', ' + DataItemID  from 
    EmrAcctPha_Medication med
    where 
    VisitID = @VisitID
    order by ', ' +  DataItemID desc
    for xml path ('')),1,2,'')
     )

    return @string

    end

在如下查询中使用:

代码语言:javascript
复制
    select AdmitDateTime, RoomID, dbo.stuffMeds(VisitID)
    from AbstractData

它变成了这样的列表:

硫酸沙丁醇

苯磺酸氨氯地平

阿司匹林

甲磺酸苄托品

双康德

环丙沙星

胶原酶

二丙戊酸钠

..。

变成这样的字符串:

二丙戊酸钠,胶原酶,环丙沙星,双黄醇,甲磺酸苄托品,阿司匹林,苯磺酸氨氯地平,硫酸阿尔布特罗

我可以将它写成一个动态存储过程,但是您不能从一个函数调用sp_executesql (或者至少我不知道如何调用)。

问如何将此函数编写成可用于任何表的方式?

EN

回答 3

Database Administration用户

回答已采纳

发布于 2018-06-01 19:21:23

在另一个答案中,@SQLRaptor提出了使用STRING_AGG的建议。与此相结合,以下几点似乎可以发挥作用:

代码语言:javascript
复制
SELECT  AdmitDateTime, RoomID, med.stuffMeds
FROM    AbstractData AD
OUTER APPLY (
    SELECT  STRING_AGG(DataItemID, ', ') WITHIN GROUP (ORDER BY DataItemID ASC) stuffMeds
    FROM    EmrAcctPha_Medication med
    WHERE   AD.VisitID = med.VisitID
) med
票数 3
EN

Database Administration用户

发布于 2018-06-01 14:54:16

在Server中有一个名为STRING_AGG的内置函数。看看文档

票数 2
EN

Database Administration用户

发布于 2018-06-01 16:02:26

如果我们违反了规则,为science...how做这件事。

创建一个视图,将您感兴趣的所有表中的所需列合并在一起,并创建一个列,该列包含源表名称,即EmrAcctPha_Medication。

然后将表名作为变量传递给函数,并对“tablename & @visited”进行筛选。

代码语言:javascript
复制
ALTER function [dbo].[stuffMeds](@VisitID varchar(55),@tablename varchar(255))
returns varchar(max)

as
begin
declare @string varchar(max)

set @string = (select stuff( (
select  distinct top 500 ', ' + DataItemID  from 
dbo.myreallybigview med
where 
VisitID = @VisitID
AND
TableName = @tablename
order by ', ' +  DataItemID desc
for xml path ('')),1,2,'')
 )

return @string

end
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/208489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档