Blog Post

Creating a Striped Backup Set with AI

,

I needed to test a striped backup, so I decided to ask the AI’s for help.

This is part of a series of experiments with AI systems.

The Problem

A customer wanted to know if we could handle a large striped backup set. In this case, 20 files. I didn’t want to try and do this myself because I was busy at the time, so I thought I could get the AI’s to help me.

I started with this prompt:  for a sql server database called “Sandbox” can you generate a backup command that will stripe the backup across 32 files with “sandbox” the current date/time, and a number for the backup file name?

Local Gemma3 LLM

I started with a local model because I had that open. I got a result that looked OK.

2025-10_0149

Below this I had PowerShell code to help me:

-- Using PowerShell (example):
# $i = 1
# while ($i -le 32)
# {
#   $filename = "D:BackupsSandbox_" + REPLACE(CONVERT(VARCHAR, GETDATE(), 112), ' ', '_') + "_" + $i.ToString("D3").PadLeft(3, '0') + ".bak"
#   # Execute the backup command:
#   Invoke-Command -ComputerName <ServerName> -ScriptBlock {
#       & "backup.exe" -Database "Sandbox" -BackupFile "$($filename)" -BackupType "D" -Init -Format "MEDIANAME = "Sandbox""
#   }
#   $i++
# }

This won’t work, proving that there isn’t enough database training in some of these small models. The model does warn me this won’t work as is.

Claude

Since the local model was slow, and didn’t get me what I wanted, I tried Claude. Same prompt, and I got this code, which is nice in that it handles the current date time whenever I run it.

DECLARE @BackupPath NVARCHAR(500) = 'C:Backups' -- Change this to your backup directory
DECLARE @DateTime NVARCHAR(20) = CONVERT(NVARCHAR, GETDATE(), 112) + '_' + REPLACE(CONVERT(NVARCHAR, GETDATE(), 108), ':', '')
DECLARE @BackupCommand NVARCHAR(MAX)

SET @BackupCommand = 'BACKUP DATABASE [Sandbox] TO '

-- Generate 32 striped backup files
SET @BackupCommand = @BackupCommand +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_01.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_02.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_03.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_04.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_05.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_06.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_07.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_08.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_09.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_10.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_11.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_12.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_13.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_14.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_15.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_16.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_17.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_18.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_19.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_20.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_21.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_22.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_23.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_24.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_25.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_26.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_27.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_28.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_29.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_30.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_31.bak'', ' +
     'DISK = ''' + @BackupPath + 'sandbox_' + @DateTime + '_32.bak'' ' +
     'WITH COMPRESSION, STATS = 10'

EXEC sp_executesql @BackupCommand

I could easily then test this by adding a SELECT and commenting out the Backup command. When I do that, I see these results.

2025-10_0150

Note I’ve started adding some line breaks to the results so I can check things.

Prompt AI

I decided to try Prompt AI as well. I started with this code:

BACKUP DATABASE sandbox
TO DISK = ‘sandbox_20251013_x.bak’ WITH INIT

Then I opened Prompt AI and entered this: expand this backup command to create a striped backup of 32 files, replacing the x with a number for each file

You can see this below:

2025-10_0148

This got me a quick and dirty backup test.

2025-10_0147

2025-10_0151

Then we need to correct the syntax.

2025-10_0152

Now I have a command.

2025-10_0153

However, this doesn’t work as I can’t use string concatenation inside the backup command. I asked Prompt AI to generate a string for this instead (from this code) and then sp_exeutesql and got this code:

DECLARE @DateString VARCHAR(8) = CONVERT(VARCHAR(8), GETDATE(), 112) -- Format: YYYYMMDD
DECLARE @BackupCommand NVARCHAR(MAX)

-- Build the backup command as a string
SET @BackupCommand = 'BACKUP DATABASE sandbox TO '

-- Add all backup file destinations
SELECT @BackupCommand = @BackupCommand + CASE
                                              WHEN LEN(@BackupCommand) > 25 THEN
                                                  ', '
                                              ELSE
                                                  ''
                                          END + -- Add comma except for first item
     'DISK = ''sandbox_' + @DateString + '_' + CAST(number AS VARCHAR(2)) + '.bak'''
FROM master.dbo.spt_values
WHERE type = 'P'
       AND number
       BETWEEN 1 AND 32

-- Add WITH INIT
SET @BackupCommand = @BackupCommand + ' WITH INIT'

-- Execute the dynamically built command
--EXEC sp_executesql @BackupCommand
SELECT @BackupCommand

That works.

2025-10_0155

Summary

Both Claude and PromptAI worked, though Claude worked well with a first prompt. I continue to like the Sonnet model and find it really helpful in saving time.

It took me longer to write this post than generate the code in 3 places and test it. In terms of saving time, Claude would have saved me at least probably ten minutes, maybe more, as I’d spend time making decisions. With Claude, I got the code in under a minute and then needed to test it.

Always test your code. Including your AI-generated code.

Original post (opens in new tab)
View comments in original post (opens in new tab)

Rate

You rated this post out of 5. Change rating

Share

Share

Rate

You rated this post out of 5. Change rating