从记录中删除其他分隔符

时间:2016-08-12 10:55:32

标签: sql-server

我正在使用STUFF函数来检索列的多个行值。

     ALTER PROCEDURE [dbo].[PrintOutlettoOutletTransfer]  
     @TransferCode varchar(20),
     @token nvarchar(50)

     AS
     BEGIN

     DECLARE @Isprint AS int
     DECLARE @user AS VARCHAR(50)
     DECLARE @PcIp AS VARCHAR(50)
     DECLARE @PcName AS VARCHAR(50)
     DECLARE @AditUserName AS VARCHAR(100)
     DECLARE @outlet AS VARCHAR(100)
     DECLARE @ServerName AS VARCHAR(200)

     SET @user = ''


-- Retrive data from user login history from Tocken
   SELECT 
   @user = UserLogInHistory.UserId,
   @PcIp = LogInIp, 
   @outlet=OutletCode,
   @ServerName = ServerId,
   @AditUserName = Users.UserFullName
   from UserLogInHistory
   inner join Users on Users.UserId = UserLogInHistory.UserId
   where UserTokenId = @token;

   SELECT
    ISNULL(InventoryTransferHeader.TransferCode,'') AS 'TransferId',
    ISNULL(InventoryTransferHeader.TransferDate,'') AS 'TransferDate',
    ISNULL(InventoryTransferLine.ItemCode,'') AS 'ItemCode',
    ISNULL(InventoryTransferLine.ItemDescription,'') AS 'ItemDescription',
    ISNULL(InventoryTransferLine.Qty,'') AS 'Qty',

    STUFF((SELECT InventoryTransferSerials.SerialNo  + ' / '
           FROM InventoryTransferSerials
           WHERE InventoryTransferSerials.ItemCode = InventoryTransferLine.ItemCode
           AND InventoryTransferSerials.TransferCode = InventoryTransferHeader.TransferCode 
           FOR XML PATH('')),1,1,'') AS 'SN',

    ISNULL(InventoryStatus.Description,'') AS 'InventoryStatus',
    ISNULL(InventoryTransferHeader.FromOutlet,'') AS 'outletFrom' ,
    ISNULL(F.OutletDesc,'') AS 'fromOutletsDesc',
    ISNULL(InventoryTransferHeader.TOOutlet,'') AS 'outletTO' ,
    ISNULL(T.OutletDesc,'') AS 'toOutletsDesc' 


    FROM    InventoryTransferHeader
    INNER JOIN
    Outlets F ON InventoryTransferHeader.FromOutlet = F.OutletCode
    INNER JOIN
    Outlets T ON InventoryTransferHeader.ToOutlet = T.OutletCode 
    LEFT OUTER JOIN
    InventoryStatus on InventoryStatus.StatusCode = InventoryTransferHeader.InventoryStatus
    LEFT OUTER JOIN
    InventoryTransferLine ON InventoryTransferLine.TransferCode = InventoryTransferHeader.TransferCode 


     WHERE (InventoryTransferHeader.TransferCode = @TransferCode OR          @TransferCode = '') AND (InventoryStatus.StatusCode = 1 OR InventoryStatus.StatusCode = 2)

    --- Insert Values to Audit table
INSERT INTO PrintHistory
([DocType],[Reference],[AuditOutlet],[AuditUser],[AuditDate],[AuditType],[AuditIp],[AuditPc],[AuditUserName])
values
('OutletToOutletInventoryTransfer',@TransferCode,@outlet,@user,GETDATE(),'1',@PcIp,@ServerName,@AditUserName);


      UPDATE InventoryTransferHeader
      SET   InventoryTransferHeader.[Print] = 1,
            InventoryTransferHeader.[PrintUser] = @user,
            InventoryTransferHeader.[PrintDate] = GETDATE()
      WHERE InventoryTransferHeader.TransferCode = @TransferCode AND InventoryTransferHeader.[Print] = 0;


   END

它提供如下输出。

0000227/10000228/10000229/10000230/10000231/

我想从记录中删除附加的“/”。

请帮忙。

1 个答案:

答案 0 :(得分:1)

最后删除单个尾随正斜杠的一个选项是将当前SELECT包装在子查询中并使用LEFT

SELECT LEFT(t.SN, LEN(t.SN) - 1)
FROM
(
    SELECT STUFF((SELECT InventoryTransferSerials.SerialNo  + ' /'
                  FROM InventoryTransferSerials
                  WHERE InventoryTransferSerials.ItemCode =
                        InventoryTransferLine.ItemCode AND
                        InventoryTransferSerials.TransferCode =
                        InventoryTransferHeader.TransferCode 
                  FOR XML PATH('')), 1, 1, '') AS SN
    FROM yourTable
) t