我正在尝试将我的SQL备份脚本/查询与我的power shell脚本结合起来,我不知道如何转换它,因为我不太了解SQL只有Powershell。我一直试图在脚本的每一行之前使用invoke-sqlcmd
,但我不会想到你是怎么做的。我不完全理解invoke-sqlcmd
Micrsoft的语法没有帮助。这是我需要使用的SQL数据库备份脚本:
DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
-- specify database backup directory
SET @path = 'F:\Backups\'
-- specify filename format
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name IN ('dbname','dbname','dbname','dbname','dbname','dbname') -- exclude these databases
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName
WITH COMPRESSION
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
在sql查询的每一行的前面添加invoke-sqlcmd
是否正确?此外,无论采用何种解决方案,都需要与Windows Server 2008兼容。我认为这可能就像将整个脚本放在invoke-sqlcmd
的引号中一样简单,但我对此表示怀疑。每当我谷歌这个答案太复杂,并没有真正解释SQL如何与Powershell联系。他们只是假设你知道。此脚本中唯一需要更改的字段是在SQL Studio上运行它时的路径。
答案 0 :(得分:1)
Sqlcmd旨在替代sqlcmd命令行工具。
使用sqlcmd可以做的很多事情也可以完成 调用-SQLCMD。
因此,您将一次执行命令。使用外部文件或多行SQL字符串。请参阅下面的示例。
将sql备份脚本保存到backupDaily.sql等其他文件中。之后使用以下语法。
Invoke-Sqlcmd -InputFile "C:\backupScripts\backupDaily.sql" | Out-File -filePath "C:\backupScripts\backupDailyCmd.rpt"
好处是你可以在Sql Server Management Studio中尝试这个sql文件,看看它是否有效。
$SQL_QUERY = @"
YOUR QUERY HERE.
"@
Invoke-Sqlcmd -Query $SQL_QUERY -ServerInstance "MyComputer\MyInstance"
您可以在此处轻松使用字符串替换。
$name = 'atilla'
$SQL_QUERY = @"
SELECT * FROM Employees WHERE NAME LIKE $($name)
"@
Invoke-Sqlcmd -Query $SQL_QUERY -ServerInstance "MyComputer\MyInstance"
答案 1 :(得分:0)
我不会使用powershell进行备份。
我建议使用SQL存储过程来安排作业。
USE msdb ;
GO
-- creates a schedule named NightlyJobs.
-- Jobs that use this schedule execute every day when the time on the server is 01:00.
EXEC sp_add_schedule
@schedule_name = N'NightlyJobs' ,
@freq_type = 4,
@freq_interval = 1,
@active_start_time = 010000 ;
GO
-- attaches the schedule to the job BackupDatabase
EXEC sp_attach_schedule
@job_name = N'BackupDatabase',
@schedule_name = N'NightlyJobs' ;
GO
希望这个链接会有所帮助。 asked it again
答案 2 :(得分:0)
您可以使用sqlcmd备份数据库。 对于默认实例
SqlCmd -E -S MyServer –Q “BACKUP DATABASE [MyDB] TO DISK=’D:BackupsMyDB.bak'”
用于命名实例
SqlCmd -E -S MyServerMyInstance –Q “BACKUP DATABASE [MyDB] TO DISK=’D:BackupsMyDB.bak'”