Я работаю над скриптом PowerShell с SMO для программирования SQL Server. Ниже приведена упрощенная версия моего сценария.Программирование SMO SQL Server, где установить свойство CommandTimeout?
# Load SMO assembly, and if we're running SQL Server 2008 DLLs load the SMOExtended and SQLWMIManagement libraries
$v = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO");
if ((($v.FullName.Split(','))[1].Split('='))[1].Split('.')[0] -ne '9') {
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMOExtended") | out-null;
}
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SmoEnum') | out-null;
$server = New-Object ("Microsoft.SqlServer.Management.Smo.Server") ".\sql2014";
$server.Databases["master"].ExecuteWithResults("select * from sys.database_files");
Теперь мой скрипт всегда раз, и я гугл вокруг против интернета и нашел, что я должен установить CommandTimeout
property где-то в моем коде.
Однако имущество CommandTimeout
предназначено для оплаты: SqlCommand
. То, как я использую SMO для выполнения запроса, не имеет объекта SqlCommand
. Как вы можете видеть, я могу выполнить непосредственно на $server.Databases["master"]
.
Может ли кто-нибудь помочь указать, где я должен установить CommandTimeout
?
Спасибо.
Несколько комментариев стиля - попробуйте 'import-module SQLPS -DisableNameChecking' вместо всего, что отражает LoadWithPartialName. Кроме того, если вы собираетесь в конечном итоге выбирать файлы данных, на самом деле используйте модель SMO: в базах есть FileGroups, которые, в свою очередь, имеют файлы. Базы данных также имеют LogFiles. Но в конечном итоге вы хотите использовать представление объектов этих вещей, а не пытаться проанализировать вывод своего специального запроса. –