Summary: Running ArcSDESQLExecute fails when using OPENQUERY.
Error: Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.(18456)
System: SQL Server 2008r2 (Enterprise Database - "DB1") and 2016 SP2 (Non-Enterprise Database connected with OPENQUERY - "DB2")
Driver: ODBC Driver 13 for SQL Server
Python: Pro 2.2.2 instance (3.6.5)
Connection Files Created with Catalog 10.3.1
Details:
Executing a simple query with ArcSDESQLExecute is successful. When OPENQUERY is used it appears credentials are not passed to the joined server/database. I've tested this with several users that are added as Logins to the Servers and Databases. This query runs properly in SQL Server Management Studio.
Other SQL Log Errors:
- There is already an object named '##SDE_8868_184399_DB1' in the database.
- Invalid object name 'DB1.dbo.SDE_branches'. (208)
- Statement(s) could not be prepared. (8180)
- Invalid object name 'DB1.PSLARKIN.SDE_logfiles'. (208) <- Will reference my user name regardless of which OS user is set in the SDE connection file.
Query:
<SPAN class="keyword token">SELECT</SPAN> gis_ACO_NUM <SPAN class="punctuation token">,</SPAN> PID_NUM <SPAN class="keyword token">FROM</SPAN>
<SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">SELECT</SPAN>
LTRIM<SPAN class="punctuation token">(</SPAN>RTRIM<SPAN class="punctuation token">(</SPAN>ACO_NUM<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> ACO_NUM
<SPAN class="punctuation token">,</SPAN>LTRIM<SPAN class="punctuation token">(</SPAN>RTRIM<SPAN class="punctuation token">(</SPAN>PID_NUM<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> PID_NUM
<SPAN class="keyword token">FROM</SPAN> DB1<SPAN class="punctuation token">.</SPAN>DB1SCHEMA<SPAN class="punctuation token">.</SPAN>SEGPOINTS
<SPAN class="keyword token">WHERE</SPAN> <SPAN class="punctuation token">(</SPAN> SUBSTRING<SPAN class="punctuation token">(</SPAN>PID_NUM<SPAN class="punctuation token">,</SPAN><SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="string token">'.'</SPAN> <SPAN class="operator token">AND</SPAN> <SPAN class="token function">LEN</SPAN><SPAN class="punctuation token">(</SPAN>PID_NUM<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="number token">10</SPAN> <SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">OR</SPAN> <SPAN class="punctuation token">(</SPAN> SUBSTRING<SPAN class="punctuation token">(</SPAN>PID_NUM<SPAN class="punctuation token">,</SPAN><SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="string token">'.'</SPAN> <SPAN class="operator token">AND</SPAN> <SPAN class="token function">LEN</SPAN><SPAN class="punctuation token">(</SPAN>PID_NUM<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="number token">11</SPAN> <SPAN class="operator token">AND</SPAN> SUBSTRING<SPAN class="punctuation token">(</SPAN>PID_NUM<SPAN class="punctuation token">,</SPAN><SPAN class="number token">11</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">NOT</SPAN> <SPAN class="operator token">LIKE</SPAN> <SPAN class="string token">'%[^a-zA-Z]%'</SPAN> <SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">UNION</SPAN>
<SPAN class="keyword token">SELECT</SPAN>
LTRIM<SPAN class="punctuation token">(</SPAN>RTRIM<SPAN class="punctuation token">(</SPAN>ACO_NUM<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> ACO_NUM
<SPAN class="punctuation token">,</SPAN>LTRIM<SPAN class="punctuation token">(</SPAN>RTRIM<SPAN class="punctuation token">(</SPAN>PID_NUM<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> PID_NUM
<SPAN class="keyword token">FROM</SPAN> DB1<SPAN class="punctuation token">.</SPAN>DB1SCHEMA<SPAN class="punctuation token">.</SPAN>SEGHISTORYPOINT
<SPAN class="keyword token">WHERE</SPAN> <SPAN class="punctuation token">(</SPAN> SUBSTRING<SPAN class="punctuation token">(</SPAN>PID_NUM<SPAN class="punctuation token">,</SPAN><SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="string token">'.'</SPAN> <SPAN class="operator token">AND</SPAN> <SPAN class="token function">LEN</SPAN><SPAN class="punctuation token">(</SPAN>PID_NUM<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="number token">10</SPAN> <SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">OR</SPAN> <SPAN class="punctuation token">(</SPAN> SUBSTRING<SPAN class="punctuation token">(</SPAN>PID_NUM<SPAN class="punctuation token">,</SPAN><SPAN class="number token">6</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="string token">'.'</SPAN> <SPAN class="operator token">AND</SPAN> <SPAN class="token function">LEN</SPAN><SPAN class="punctuation token">(</SPAN>PID_NUM<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="number token">11</SPAN> <SPAN class="operator token">AND</SPAN> SUBSTRING<SPAN class="punctuation token">(</SPAN>PID_NUM<SPAN class="punctuation token">,</SPAN><SPAN class="number token">11</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">NOT</SPAN> <SPAN class="operator token">LIKE</SPAN> <SPAN class="string token">'%[^a-zA-Z]%'</SPAN> <SPAN class="punctuation token">)</SPAN>
<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">AS</SPAN> segPoints
<SPAN class="comment token">--section above the join will run correctly with ArcSDESQLExecute. Section below will not.</SPAN>
<SPAN class="keyword token">LEFT</SPAN> <SPAN class="keyword token">JOIN</SPAN>
<SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">SELECT</SPAN> <SPAN class="keyword token">DISTINCT</SPAN>
<SPAN class="keyword token">CASE</SPAN> <SPAN class="keyword token">WHEN</SPAN> SUBSTRING<SPAN class="punctuation token">(</SPAN>seg_merge_nbr<SPAN class="punctuation token">,</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="string token">'-'</SPAN> <SPAN class="operator token">AND</SPAN> SUBSTRING<SPAN class="punctuation token">(</SPAN>seg_merge_nbr<SPAN class="punctuation token">,</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">IN</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'97'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">'98'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">'99'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">THEN</SPAN> <SPAN class="string token">'19'</SPAN> <SPAN class="operator token">+</SPAN> REPLACE<SPAN class="punctuation token">(</SPAN>seg_merge_nbr<SPAN class="punctuation token">,</SPAN><SPAN class="string token">'-'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">''</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">WHEN</SPAN> SUBSTRING<SPAN class="punctuation token">(</SPAN>seg_merge_nbr<SPAN class="punctuation token">,</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="string token">'-'</SPAN> <SPAN class="operator token">AND</SPAN> SUBSTRING<SPAN class="punctuation token">(</SPAN>seg_merge_nbr<SPAN class="punctuation token">,</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">IN</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'00'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">THEN</SPAN> <SPAN class="string token">'20'</SPAN> <SPAN class="operator token">+</SPAN> REPLACE<SPAN class="punctuation token">(</SPAN>seg_merge_nbr<SPAN class="punctuation token">,</SPAN><SPAN class="string token">'-'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">''</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">ELSE</SPAN> seg_merge_nbr
<SPAN class="keyword token">END</SPAN> gis_ACO_NUM
<SPAN class="punctuation token">,</SPAN>parent_parcel
<SPAN class="keyword token">FROM</SPAN> <SPAN class="keyword token">OPENQUERY</SPAN><SPAN class="punctuation token">(</SPAN>DB2Server<SPAN class="punctuation token">,</SPAN><SPAN class="string token">'SELECT seg_merge_nbr,parent_parcel,seg_status_cd FROM DB2Server.DB2.DB2Schema.seg_merge'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">where</SPAN> seg_status_cd <SPAN class="operator token">=</SPAN> <SPAN class="string token">'DONE'</SPAN>
<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">AS</SPAN> asc_seg
<SPAN class="keyword token">ON</SPAN> ACO_NUM <SPAN class="operator token">=</SPAN> gis_ACO_NUM <SPAN class="operator token">AND</SPAN> PID_NUM <SPAN class="operator token">=</SPAN> parent_parcel
<SPAN class="keyword token">WHERE</SPAN> gis_ACO_NUM <SPAN class="operator token">is</SPAN> <SPAN class="operator token">not</SPAN> <SPAN class="token boolean">null</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>