2015-05-16 2 views
3

Я пытаюсь сделать инструкцию SQL для создания файла .txt для каждого идентификатора, добавленного в базу данных, но это не работает. Я стараюсь:Создать .txt файл из инструкции SQL

DECLARE @FileName varchar(50), @bcpCommand varchar(2000) 
SET @FileName = REPLACE('G:\'+CONVERT(char(8),GETDATE(),1)+'.txt','/','-') 
SET @bcpCommand = 'bcp "SELECT * FROM dbo.dbTest WHERE (DATEADD(MINUTE,-1420, GETDATE())) < [date];" queryout "' 
SET @bcpCommand = @bcpCommand + @FileName + '" -U garth -P pw -c' 
PRINT @bcpCommand 

и, конечно, мне нужен этот результат, сэкономленный в G: /, но это не работает для меня. Мое имя db - testDB

ответ

0

Вы имели в виду, что хотите создать файл bcp для каждой базы данных? Просто перейдите по всем базам данных и убедитесь, что вы указали параметр имени базы данных для своего оператора bcp, чтобы он знал, в какую базу данных будет выполняться запрос запроса. Еще одна вещь, которую вам нужно исправить, - это имя файла. Вы можете изменить его ниже, чтобы добавить имя db в выходной файл, чтобы вы не переписывали каждый результат.

DECLARE @FileName varchar(50), @bcpCommand varchar(2000) 
declare @x int = 5 
declare @y int 
declare @dbname varchar(100) 
select @y = max(database_id) from sys.databases 

while @x <= @y 
begin 
select @dbname = name from sys.databases where database_id = @x 
if @dbname is not null 
begin 
    SET @FileName = REPLACE('G:\'+CONVERT(char(8),GETDATE(),1) +'.txt','/','-') 
    SET @bcpCommand = 'bcp "SELECT * FROM dbo.dbTest WHERE (DATEADD(MINUTE,-1420, GETDATE())) < [date];" queryout "' 
    SET @bcpCommand = @bcpCommand + @FileName + '" -U garth -P pw -c -d"' + @dbname + '"' 
    PRINT @bcpCommand 
end 
set @x = @x + 1 
end 

Примеры результатов:

bcp "SELECT * FROM dbo.dbTest WHERE (DATEADD(MINUTE,-1420, GETDATE())) < [date];" queryout "G:\05-16-15.txt" -U garth -P pw -c -d"db1" 
bcp "SELECT * FROM dbo.dbTest WHERE (DATEADD(MINUTE,-1420, GETDATE())) < [date];" queryout "G:\05-16-15.txt" -U garth -P pw -c -d"db2" 
bcp "SELECT * FROM dbo.dbTest WHERE (DATEADD(MINUTE,-1420, GETDATE())) < [date];" queryout "G:\05-16-15.txt" -U garth -P pw -c -d"db3" 
bcp "SELECT * FROM dbo.dbTest WHERE (DATEADD(MINUTE,-1420, GETDATE())) < [date];" queryout "G:\05-16-15.txt" -U garth -P pw -c -d"db4" 
Смежные вопросы