[英]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...'
。
不過,似乎使用STUFF
和FOR 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.