Невозможно выполнить SQL-запрос, который начинается с «WITH» вместо «SELECT» - PullRequest
0 голосов
/ 26 октября 2019

Когда я пытаюсь выполнить SQL-запрос начинается с «WITH», я получаю следующую ошибку

Запрос:

WITH BMC_Dependency_IP_Endpoint AS (
SELECT ER.SOURCE_RECONCILIATIONIDENTITY, ER.CLASSID
    ,re.DNSHOSTNAME,re.NETWORKLOCATION,re.IPSUBNET,re.NETWORKZONE,re.NETWORKENVIRONMENT,re.SUBNETMASK,re.NAME
    FROM BMC_CORE_BMC_DEPENDENCY er
    INNER JOIN (SELECT * FROM BMC_CORE_BMC_IPENDPOINT WHERE DATASETID = 'BMC.ASSET' AND COALESCE(MARKASDELETED,0) <> 1) re
    ON (er.DESTINATION_RECONCILIATIONIDEN = RE.RECONCILIATIONIDENTITY)
    WHERE er.DESTINATION_CLASSID = 'BMC_IPENDPOINT' AND er.SOURCE_CLASSID = 'BMC_COMPUTERSYSTEM' AND er.DATASETID = 'BMC.ASSET' AND COALESCE(er.MARKASDELETED,0) <> 1 AND er.classid = 'BMC.CORE:BMC_HOSTEDACCESSPOINT'
),
APP_PORTFOLIO_APPID AS
(
        select DISTINCT APPID, APPLICATION_OWNER_NAME, APP_SUP_CONTACT_NAME, AppSupDelegateName, PRODUCT_CATEGORIZATION_TIER_1, PRODUCT_CATEGORIZATION_TIER_2, PRODUCT_CATEGORIZATION_TIER_3
         , IT_SERVICE
        FROM PCT_PRODUCT_CATALOG
              WHERE APPID IS NOT NULL AND STATUS = 1
)


SELECT c.HOSTNAME, c.SERIALNUMBER, dbo.FN_ADJUSTED_DATE(c.LastScanDate) as LASTSCANDATE,c.Environment, c.AWS_State, c.CME_Live_State, c.PrimaryIPAddress, c.Location, c.PRIMARYAPPID, c.Category, c.RFB, c.OSName, c.OSType, OSversion, OSPatchLevel, c.PatchSlot, c.Nextgen, c.CME_Managed, c.CME_Chef
,COALESCE(ip.name,c.PrimaryIPAddress) AS IP
,ap.PRODUCT_CATEGORIZATION_TIER_3 as Application
FROM BMC_CORE_BMC_ComputerSystem c
LEFT OUTER JOIN BMC_Dependency_IP_Endpoint ip
ON ip.SOURCE_RECONCILIATIONIDENTITY = c.ReconciliationIdentity
LEFT OUTER JOIN APP_PORTFOLIO_APPID ap
ON ap.APPID = c.PRIMARYAPPID
WHERE c.DATASETID = 'BMC.ASSET' AND COALESCE(c.MARKASDELETED,0) <> 1

Ошибка:

Исключение вызывает "Fill" с аргументом (ами) "1": "Тайм-аут выполнения истек. Время ожидания истекло до завершения операции или сервер не отвечает."

Попытка выполнитьотдельные блоки в запросе, который работает нормально

$SQLServer = "XXXX,YYY"
$SQLDBName = "AAAAA"
$uid ="readonly"
$pwd = "read"
$SQLquery = [System.IO.File]::ReadAllText("C:\PC\sql.txt") 
write-host "SQL Query : $SqlQuery"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName;User ID = $uid; Password = $pwd;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)

$DataSet.Tables[0] | Export-Csv "C:\PC\new.csv"

Ожидаемые результаты:

CSV-файл со всеми значениями

Фактические результаты:

Вызов исключения«Заполните» аргументом (ами) «1»: «Время ожидания истекло. Время ожидания истекло до завершения операции или сервер не отвечает».

1 Ответ

0 голосов
/ 26 октября 2019

(при условии, что запрос будет выполняться нормально). Обычно это тот случай, когда выполнение запроса занимает более 30 секунд. Вы можете установить CommandTimeout на более длительное значение, чем 30 секунд по умолчанию:

...
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection

$SqlCmd.CommandTimeout = 1000

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...