的通配符(类似 *),并指向文件的位置。 基本上,我有一个问题来表达“ 170853”。 我正在尝试使用通配符忽略任何会发生的任何不同模式。 Bottom是我运行的整个T-SQL来恢复DB,但只有需要注意的区域才是以'Concat'.
开头的地方。DECLARE @sql nvarchar(max);
DECLARE @maxInputFiles BIGINT = 6;
WITH L1 AS (
SELECT *
FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) n(n)
),
L2 AS (
SELECT 1 n
FROM L1 AS a, L1 AS b
)
SELECT @sql = N'
RESTORE DATABASE [WH_BEE]
FROM ' +
STRING_AGG(
CONCAT('
DISK = N''F:\Test\WH_BEE_FULL',
'_',
convert(varchar(8),cast(GETDATE()-3 as date),112),
'_',
'%',
'_',
g.value,
'.bak'''
),
', '
) + N'
WITH REPLACE, FILE = 1,
MOVE N''WH_Data1'' TO N''F:\data2022\WH_BEE.MDF'',
MOVE N''WH_Data2'' TO N''F:\data2022\WH_BEE_1.NDF'',
MOVE N''WH_Log'' TO N''G:\log2022\WH_BEE.LDF'', STATS = 5;
'
FROM (
SELECT TOP(@maxInputFiles)
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS value
FROM L2
) AS g;
EXEC master.sys.sp_executesql @sql;
您可以使用
xp_dirtree
在文件夹中获取文件列表,然后您可以撰写T-SQL命令来还原数据库:
DECLARE @Folder VARCHAR(100)='F:\Test\'
DECLARE @FileNames TABLE (Name VARCHAR(100) PRIMARY KEY, Depth INT, IsFile BIT)
INSERT INTO @FileNames (Name, Depth, IsFile)
EXEC xp_DirTree @Folder,0,1
DECLARE @sql nvarchar(max);
DECLARE @maxInputFiles BIGINT = 6;
SELECT @sql = N'RESTORE DATABASE [WH_BEE] FROM
' +
STRING_AGG('DISK = N'''+@Folder+Name,',
') + N'
WITH REPLACE, FILE = 1,
MOVE N''WH_Data1'' TO N''F:\data2022\WH_BEE.MDF'',
MOVE N''WH_Data2'' TO N''F:\data2022\WH_BEE_1.NDF'',
MOVE N''WH_Log'' TO N''G:\log2022\WH_BEE.LDF'', STATS = 5;'
FROM @FileNames
WHERE Name LIKE 'WH_BEE_FULL_'+convert(varchar(8),cast(GETDATE()-3 as date),112)+'%.bak'
PRINT @sql;
EXEC master.sys.sp_executesql @sql;