我有一个存储过程hello
,它会生成一个表。我想每周使用sql job来备份该表。有人可以告诉我一个命令。
到目前为止,我尝试使用以下命令备份数据库employee
中的现有表emp
:
DECLARE @table VARCHAR(128),
@file VARCHAR(255),
@cmd VARCHAR(512)
SET @table = 'dbo.employee' -- Table Name which you want to backup
SET @file = 'C:\Users\vibhav.sarraf\Documents\New_folder\' + @table + '_' + CONVERT(CHAR(8), GETDATE(), 112)
+ '.dat'
SET @cmd = 'bcp ' + @table + ' out ' + @file + ' -n -T '
EXEC emp..xp_cmdshell @cmd
生成0字节文件并给出错误:
错误
[Microsoft] [SQL Server Native Client 11.0] [SQL Server]无效的对象名称' dbo.employee'。
我认为是因为我没有使用use emp;
注意: - 我不想在我的数据库中创建任何表
答案 0 :(得分:1)
bcp
程序在当前脚本之外运行,因此对“当前数据库”一无所知。您需要通过在命令行中设置数据库来明确告诉它该表所在的位置(否则它最终会在master
中查找它。
所以,改成它:
SET @cmd = 'bcp ' + @table + ' out ' + @file + ' -n -T -d' + @database
其中@database
是包含相关表格的数据库的名称。
查看bcp documentation了解详情。
答案 1 :(得分:0)
DECLARE @query VARCHAR(128),
@file VARCHAR(255),
@cmd VARCHAR(512),
@database varchar(128)
SET @database = 'jiradb'
SET @query = '"hello"' --where hello is the stored procedure
SET @file = 'C:\Users\vibhav.sarraf\Documents\New_folder\query.txt'
SET @cmd = 'bcp ' + @query + ' queryout ' + @file + ' -c -T -d ' + @database
EXEC jiradb..xp_cmdshell @cmd