如何备份从存储过程创建的表

时间:2015-06-10 10:09:53

标签: sql-server bcp

我有一个存储过程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;

注意: - 我不想在我的数据库中创建任何表

2 个答案:

答案 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