我在t-sql中如何表达通配符值? 我有这些文件名: wh_bee_full_20241014_170853_1.bak wh_bee_full_20241014_170853_2.bak wh_bee_full_20241014_170853_3.bak wh_bee_full_20241014_170853_4.bak wh_bee_full_20241014_170853_5.bak

问题描述 投票:0回答:0
concat

的通配符(类似 *),并指向文件的位置。 基本上,我有一个问题来表达“ 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;

t-sql concatenation
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.