繁体   English   中英

如何在T-SQL 2008字符串连接中替换表变量

[英]How to replace a table variable in T-SQL 2008 string contatenation

我有一个在SQL 2000中运行的UDF,它使用表var从几行数据中返回逗号分隔的字符串:

CREATE FUNCTION [dbo].[ReturnVisitsTaskNos]
   (  @MainlinePlanID int )
   RETURNS varchar(1000)
AS
   BEGIN
      DECLARE @TaskNoTable table
         (  TaskNo varchar (15)  )
      DECLARE @TaskList varchar(1000)
      SET @TaskList = ''
      INSERT INTO @TaskNoTable
         SELECT TaskNo
         FROM MainlinePlanTask
         WHERE MainlinePlanID = @MainlinePlanID
      IF @@ROWCOUNT > 0
         UPDATE @TaskNoTable
            SET @TaskList = ( @TaskList + TaskNo + ', ' )
      RETURN substring( @TaskList, 1, ( len( @TaskList ) - 1 ))
   END

现在它是否可以在SQL 2008上运行时更快地替换表var代码?

谢谢!

我不能保证性能,但如果使用FOR XML子句这样你一定会得到你有清洁功能的T-SQL,没有一个临时表和光标。

来自文章:

这是一个非常简单的使用FOR XML PATH()的t-sql示例,以便sql将字符串值连接为MSSQL中的示例sql连接。

SELECT
  STUFF(
    (
    SELECT
      ' ' + Description
    FROM dbo.Brands
    FOR XML PATH('')
    ), 1, 1, ''
  ) As concatenated_string

您更新的函数可能看起来像这样:

CREATE FUNCTION [dbo].[ReturnVisitsTaskNos]
   (  @MainlinePlanID int )
   RETURNS varchar(1000)
AS
   BEGIN

    RETURN
      SELECT STUFF((
    SELECT
      TaskNo + ', '
    FROM MainlinePlanTask
    WHERE MainlinePlanID = @MainlinePlanID
    FOR XML PATH('')
    ), 1, 0, ''
  ) As concatenated_string

   END
CREATE FUNCTION [dbo].[ReturnVisitsTaskNos]
   (  @MainlinePlanID int )
   RETURNS varchar(1000)
AS
   BEGIN
      DECLARE @TaskList varchar(1000)

      SET @TaskList = ''

      SELECT @TaskList = ( @TaskList + TaskNo + ', ' )
      FROM MainlinePlanTask
      WHERE MainlinePlanID = @MainlinePlanID

      RETURN substring( @TaskList, 1, ( len( @TaskList ) - 1 ))
   END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM