2016-10-23 9 views
0

Я пытаюсь экспортировать изображения с SQL-сервера с помощью bcr, мне также интересно, как это сделать, поэтому я решил попробовать сам. Так что мой вопрос, как я могу экспортировать изображения из MSSQL успешно, и то, что я до сих пор описан здесь:BCR экспортирует изображения с сервера MSSQL

В командной строке я создал файл formatfile-n.fmt и размещался на E: диск, потому что я искал в Интернете много и Я видел, что необходимо отредактировать этот файл, чтобы установить его значение SQLBINARY от 8 до 0. Читайте, что в this post (мы говорим об изображениях, поэтому нам нужно редактировать SQLBINARY).

Я выполнил команду (ниже) и экспортировал изображения в нужное место, все изображения есть, но они не имеют размера!

Вот мой полный код, когда изображение не имеет размера:

EXEC sp_configure 'show advanced options', 1 

GO RECONFIGURE GO EXEC sp_configure 'xp_cmdshell', 1 GO RECONFIGURE GO 

EXEC master..xp_cmdshell 'mkdir C:\ImagesFromSql' 

DECLARE @ID as int DECLARE @SQL as varchar(4000) 

DECLARE csr CURSOR FOR SELECT BrojIskaznice FROM [Savez].[dbo].[Igraci] 

OPEN csr 

FETCH NEXT FROM csr INTO @ID 

WHILE @@FETCH_STATUS = 0 BEGIN 


SET @SQL = 'BCP "SELECT Fotografija FROM [Savez].[dbo].[Igraci] WHERE BrojIskaznice = "' + CAST(@ID as varchar(10)) + ' queryout "C:\ImagesFromSql\' + CAST(@ID as varchar(10)) + '.jpg" -T -fC "E:\formatfile-n.fmt' 

EXEC master..xp_cmdshell @SQL 

FETCH NEXT FROM csr INTO @ID 

END 


CLOSE csr DEALLOCATE csr 

А вот мой полный код, когда изображение имеет размер оригинала. Но их вообще нельзя открыть! так как они повреждены, вот почему я возвращаюсь к this post, но я сделал это уже! измененное значение до нуля!

EXEC sp_configure 'show advanced options', 1 

GO RECONFIGURE GO EXEC sp_configure 'xp_cmdshell', 1 GO RECONFIGURE GO 

EXEC master..xp_cmdshell 'mkdir C:\ImagesFromSql' 

DECLARE @ID as int DECLARE @SQL as varchar(4000) 

DECLARE csr CURSOR FOR SELECT BrojIskaznice FROM [Savez].[dbo].[Igraci] 

OPEN csr 

FETCH NEXT FROM csr INTO @ID 

WHILE @@FETCH_STATUS = 0 BEGIN 


SET @SQL = 'BCP "SELECT Fotografija FROM [Savez].[dbo].[Igraci] WHERE BrojIskaznice = "' + CAST(@ID as varchar(10)) + ' queryout "C:\ImagesFromSql\' + CAST(@ID as varchar(10)) + '.jpg" -T -N' 

EXEC master..xp_cmdshell @SQL 

FETCH NEXT FROM csr INTO @ID 

END 


CLOSE csr DEALLOCATE csr 

Я действительно застрял здесь, это так раздражает работать, есть ли у кого-нибудь какие-либо советы?

ответ

0

Я не сейчас причина, но BCP не работает нормально с экспортом изображений. Лучший способ экспортировать изображения из SQL - это создание приложения DotNet, загрузка изображений в DataSet и их экспорт в файлы. Там много статей, показывающих, как это сделать. Example 1Example 2

Но для TSQL:

Попробуйте решение прописано в этом Topic

И для получения дополнительной информации прочитайте эту Topic и читать комментарии в нижней части правильного ответа. Мы сделали много обходных решений.

0

Во втором блоке кода для изображений с оригинальным размером, кажется, вы не указываете файл формата

NB: Я не хватает репутации комментировать.

Если вы не пытаетесь экспортировать только столбец изображения, на самом деле нет необходимости в длинном запросе или даже в файле формата. Просто используйте bcp для экспорта всей таблицы базы данных в файл данных, указанный в пути.

Declare @sql varchar(500) 
SET @sql = 'bcp Your_db.Your_table out Your_File_Path(eg: C:\ImagesNames.Dat) -T -S ' + @@SERVERNAME 
EXEC @sql 

Пожалуйста, смотрите соответствующую ссылку ниже:
https://msdn.microsoft.com/en-us/library/ms191232(v=sql.110).aspx