我想使用FME来处理来自SQL Server的执行计划(我尝试获取一个表,其中每个字段都有一行,该表在查询中使用)。
SET SHOWPLAN_XML ON函数必须在它自己的批处理中运行。对于我们来说,正常的方式是GO操作符,但是这不是T-SQL的一部分,而通常是由sqlcmd和osql实用程序解释的,因此FME SQL解释器无法理解它。我尝试过在一个SQLExecutor转换中运行'SET SHOWPLAN_XML own‘,然后在下一个SQLExecutor中执行查询,但是每个转换似乎都创建了自己的连接,这意味着在一个转换到下一个转换时,Showplan设置不会持久。
发布于 2020-12-12 02:48:40
我灵机一动,并设法使用python转换器在pyodbc中运行它。这可以在它们自己的批处理中执行查询,同时保持单个连接。我的Python Caller tramsformer是这样的:
import fmeobjects
import pyodbc
class FeatureCreator(object):
def __init__(self):
pass
def input(self,feature):
newFeature = fmeobjects.FMEFeature()
connectionStr = f"DRIVER={{SQL Server}};SERVER={FME_MacroValues['Server']};Trusted_Connection=yes;"
if FME_MacroValues['Database'] != '':
connectionStr += f"DATABASE={FME_MacroValues['Database']};"
connection = pyodbc.connect(connectionStr)
cursor = connection.cursor()
cursor.execute("SET SHOWPLAN_XML ON;")
cursor.commit()
cursor.execute(feature.getAttribute('query'))
results = cursor.fetchall()[0][0]
newFeature.setAttribute("showplan", results)
self.pyoutput(newFeature)
def close(self):
passhttps://stackoverflow.com/questions/65252308
复制相似问题