簡體   English   中英

如何在T-SQL中附加連續值?

[英]How to append consecutive values in T-SQL?

我無法使用最新值附加@msg的當前值。 第一個@msg可以打印所有值,但是第二個@msg則僅返回最新值。 我有一個創建臨時表以存儲最新值的想法。 在這種情況下,您有何建議?

FETCH NEXT FROM c_fileList INTO @dbName, @filename
   WHILE @@FETCH_STATUS = 0
   BEGIN
         SET @msg = 'Delete backup file: ' + @filename + ' For Database: ' + @dbName 
         PRINT @msg
         FETCH NEXT FROM c_fileList INTO @dbName, @filename
   END
   PRINT @msg

SET @msg = 'Delete...'不連接@msg的值,而是重新分配它。 如果要串聯該值, SET @msg = @msg + 'Delete...'

不過,似乎使用STUFFFOR XML PATH會容易得多。 游標是制作有效分隔列表的非常慢的方法。

DECLARE @msg nvarchar(4000);

SET @msg = STUFF((SELECT NCHAR(10) +
                         N'Delete backup file: ' + {FileName Column} + N' for Database: ' + {DBName Column}
                  FROM YourTable
                  --ORDER BY ???
                  FOR XML PATH(N''),TYPE).value('.','nvarchar(4000)'),1,1,N'');

PRINT @Msg;

顯而易見,這將截斷任何超過4,000個字符的值(這是PRINT的最大長度)。

如果我對您要完成的任務以及執行方式的假設是正確的,則不需要游標或臨時表:

IF OBJECT_ID('tempdb..#tempFiles', 'U') IS NOT NULL
    DROP TABLE #tempFiles

CREATE TABLE #tempFiles
(
    RecordID INT IDENTITY(1, 1) NOT NULL
    , DBName VARCHAR(32)
    , DBFileName VARCHAR(32)
)

INSERT INTO #tempFiles VALUES
('DBOne', 'c:\DBOnefileone.mdf')
, ('DBOne', 'c:\DBOnefiletwo.mdf')
, ('DBOne', 'c:\DBOnefilethree.mdf')
, ('DBOne', 'c:\DBOnelogfileone.ldf')
, ('DBTwo', 'c:\DBTwofileone.mdf')
, ('DBTwo', 'c:\DBTwologfileone.ldf')

DECLARE @msg VARCHAR(MAX) = ''

SELECT  @msg = @msg + 'Delete backup file: ' + DBFileName + ' For Database: ' + DBName + CHAR(13) + CHAR(10)
FROM    #tempFiles
ORDER BY RecordID

print @msg

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM