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

|| 我有一个在SQL 2000中运行的UDF,该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。 从文章:   这是一个非常简单的t-sql示例   使用FOR XML PATH()以进行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
    

要回复问题请先登录注册