Как установить тайм-аут сценария SQL Server из сценария?

У меня есть большой файл сценария (почти 300 МБ и, возможно, в будущем он будет больше), который я пытаюсь запустить. В комментариях к ответу Гульзара на мой вопрос об этом было высказано предположение, что Я должен изменить время ожидания скрипта на 0 (без тайм-аута).

Как лучше всего установить этот тайм-аут из сценария? На данный момент у меня все это находится в верхней части файла сценария в надежде, что один из них что-то сделает:

sp_configure 'remote login timeout', 600
go
sp_configure 'remote query timeout', 0
go
sp_configure 'query wait', 0
go
reconfigure with override
go

Однако я по-прежнему получаю тот же результат, и я не могу сказать, удалось ли мне установить тайм-аут, потому что ответ sqlcmd.exe является наименее полезным сообщением об ошибке в мире:

Sqlcmd: Ошибка: ошибка сценария.


person tags2k    schedule 22.10.2008    source источник


Ответы (3)


sqlcmd -t {n}

Где {n} должно быть числом от 0 до 65535.

Обратите внимание, что ваш вопрос вводит в заблуждение, поскольку сервер не имеет представления о тайм-аут, и поэтому вы не можете установить тайм-аут в своем скрипте.

В вашем контексте тайм-аут обеспечивается sqlcmd

person Ed Guiness    schedule 22.10.2008
comment
@edg: Я никогда не слышал о опции -t sqlcmd и не нашел ее в документации. Но я это проверил sqlcmd -? - и вот оно! Браво! - person splattne; 22.10.2008
comment
Думаю, это не сработает. sqlcmd.exe без установки -t явно означает отсутствие тайм-аута - person Tomalak; 22.10.2008
comment
Ага. Технически правильный ответ на мой вопрос, но не помог решить основную проблему. Спасибо, в любом случае! - person tags2k; 22.10.2008
comment
Тогда вы должны отменить его, чтобы другие увидели, что ваш вопрос еще не решен. - person Tomalak; 22.10.2008

Ваше решение - добавляйте GO каждые 100 или 150 строк

http://www.red-gate.com/MessageBoard/viewtopic.php?t=8109

person Community    schedule 20.03.2009
comment
Хорошая идея, кроме случаев, когда ваш скрипт использует переменные. - person Andrew Shepherd; 16.04.2010

Я думаю, что в SQL Server нет концепции тайм-аута. Вы должны установить тайм-аут в вызывающем слое / клиенте.

Согласно этой статье MSDN, вы можете попробовать увеличьте время ожидания следующим образом:

exec sp_configure 'remote query timeout', 0 
go 
reconfigure with override 
go 

"Используйте параметр тайм-аута удаленного запроса, чтобы указать, сколько времени в секундах может занять удаленная операция до истечения времени ожидания Microsoft SQL Server. Значение по умолчанию - 600, что позволяет ждать 10 минут. Это значение применяется к исходящему соединению. инициирован компонентом Database Engine как удаленный запрос. Это значение не влияет на запросы, полученные компонентом Database Engine ".

P.S .: Под 300 МБ вы имеете в виду, что в результате получается файл 300 МБ? Я не надеюсь, что сам файл сценария будет размером 300 МБ. Это был бы мировой рекорд. ;-)

person splattne    schedule 22.10.2008
comment
Да, размер самого SQL-скрипта ~ 300 МБ. Сомневаюсь, что это мировой рекорд, ведь в очень простой таблице всего 1,4 миллиона строк! - person tags2k; 22.10.2008
comment
@ tags2k о, он используется для вставки данных внутри операторов INSERT ... Я уверен, что для этого есть причина, но не могли бы вы получить данные в текстовом файле и импортировать их через DTS-пакет или что-то подобное ? - person splattne; 22.10.2008
comment
Каждую строку нужно проверять через мой API, и хотя я уверен, что смогу воспроизвести все проверки с помощью пакета DTS, на необходимое время и нагрузку я мог бы просто разделить уже имеющийся у меня сценарий SQL. - person tags2k; 22.10.2008