Member 12573208 Ответов: 1

Как получить размер текстового файла на локальном диске с помощью SQL


Я хотел бы знать, как получить размер текстового файла, присутствующего на моем диске в SQL.

Что я уже пробовал:

Я попробовал openrowset, и мой запрос выглядит так (select datalength(bulkcolumn) from openrowset(bulk 'C:\a.txt', single_clob) a)

Но когда я предоставляю переменную вместо статического пути, запрос не компилируется.

Afzaal Ahmad Zeeshan

Зачем вам использовать SQL для этой цели, когда вы можете легко получить размер в программе C#?

ZurdoDev

Потому что иногда вам нужен результат в SQL.

Afzaal Ahmad Zeeshan

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

ZurdoDev

Простой пример. Из хранимой процедуры sql выполняется другая хранимая процедура, которая выводит файл в систему. Вы проверяете размер файла, чтобы убедиться, что он экспортирован правильно, а если нет, то возвращаете что-то из sql вызывающему объекту.

Есть очень реальные и очень хорошие варианты использования для того, чтобы увидеть файлы из Sql.

Afzaal Ahmad Zeeshan

Не, File.WriteAllText(data); (в C#) работа?

Я имею в виду, что есть много способов проверить, как передаются данные. Вы можете получить данные из считывателей и записать их в файловые потоки оттуда же. Конечно, хранимые процедуры могут быть быстрыми, из-за небольшого кэширования и других вещей, иногда память также является проблемой. :-)

Может быть, я немного больше поклонник KISS, но, тем не менее, я не могу понять эту идею. Прости, Райан.

ZurdoDev

По какой-то причине вы думаете, что здесь замешан C#. Dba, скорее всего, ничего не знает о C# и никогда не нуждается в этом.

Afzaal Ahmad Zeeshan

Именно поэтому я не могу понять эту идею и поэтому, скорее всего, не ответил на этот вопрос. проблема.

ZurdoDev

У некоторых людей вся работа сводится только к написанию sql. Они никогда не используют C#, и sql, который они генерируют, не используется sql, все это хранится в самом SQL.

Afzaal Ahmad Zeeshan

Мои теплые пожелания им. :-)

Овации.

Sergey Alexandrovich Kryukov

:-)

Member 12573208

Я должен использовать sql. Таково требование. У меня уже есть c# exe, который проверяет размер файла

ZurdoDev

1. ответьте на комментарий так, чтобы пользователь был уведомлен.
2. у вас есть код, который работает, поэтому все, что вам нужно сделать, это отладить его и выяснить, почему ваша переменная вызывает синтаксическую ошибку. Все должно быть довольно просто.

Sergey Alexandrovich Kryukov

Это не имеет ничего общего с SQL. SQL "ничего не знает" ни о каких дисках или файловых системах. Конечно, вы можете хранить информацию о файлах в своем SQL точно так же, как и любую другую информацию.
—СА

ZurdoDev

Код ОП действительно работает.

Sergey Alexandrovich Kryukov

Какой код?..
—СА

ZurdoDev

выберите datalength (bulkcolumn) из openrowset (bulk 'C:\a.txt', single_clob) a

Это вернет байты a.txt.

Sergey Alexandrovich Kryukov

А ... Спасибо за записку. Я этого не понимал...
—СА

jgakenhe

Вы можете использовать СУБД, такие как Oracle и SQL Server. Вы должны быть в состоянии погуглить его. Я придумал это без всяких усилий: http://stackoverflow.com/questions/2349552/using-t-sql-to-query-a-file-system-folder

CHill60

Стоит опубликовать в качестве решения, чтобы вытащить это из списка без ответа :-)

Daniel Jones

проверьте следующую ссылку: http://stackoverflow.com/questions/7952406/get-each-file-size-inside-a-folder-using-sql

1 Ответов

Рейтинг:
1

jgakenhe

В соответствии с приведенной выше рекомендацией я опубликую свой совет/решение, чтобы заставить мяч катиться.

В стеке есть хороший пример xp_cmdshell at:
[^]
Используя этот пример, вам сначала нужно будет настроить xp_cmdshell с помощью sp_configure, как показано ниже (если у вас нет разрешений, вам понадобится системный администратор или администратор базы данных, чтобы запустить его за вас):

Use Master
GO

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
GO


Теперь вы можете запустить xp_cmdshell.

EXECUTE master.dbo.xp_cmdshell 'DIR "C:\YourDirectory" /A-D /B'


Это хорошо работает. Он появляется в окне результатов в привычном табличном формате.