【问题标题】:SQL Server execution plan in FMEFME 中的 SQL Server 执行计划
【发布时间】:2021-03-22 22:12:59
【问题描述】:

我想使用 FME 来处理来自 SQL Server 的执行计划(我试图为查询中使用的每个字段获取一个包含一行的表)。

SET SHOWPLAN_XML ON 函数必须在它自己的批处理中运行。对我们来说,正常的方法是GO 运算符,但这不是 T-SQL 的一部分,但通常由 sqlcmd 和 osql 实用程序解释,因此 FME SQL 解释器不理解它。我尝试在一个 SQLExecutor 转换中运行“SET SHOWPLAN_XML ON”,然后在下一个 SQLExecutor 中运行查询,但每个转换似乎都创建了自己的连接,这意味着 Showplan 设置不会从一个转换器持续到下一个。

【问题讨论】:

    标签: sql-server sql-execution-plan fme


    【解决方案1】:

    有一个脑电波,并设法使用 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):
            pass
    
    
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 2011-04-12
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多