无法执行以“ WITH”而不是“ SELECT”开头的SQL查询

时间:2019-10-25 21:26:00

标签: powershell sqlclient

当我尝试执行以“ WITH”开头的SQL查询时,出现以下错误

查询:

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

错误:

  

使用“ 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 :(得分:0)

(假设查询将正常执行),通常是查询执行时间超过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
...