首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FME中的SQL Server执行计划

FME中的SQL Server执行计划
EN

Stack Overflow用户
提问于 2020-12-11 21:32:21
回答 1查看 61关注 0票数 0

我想使用FME来处理来自SQL Server的执行计划(我尝试获取一个表,其中每个字段都有一行,该表在查询中使用)。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-12 02:48:40

我灵机一动,并设法使用python转换器在pyodbc中运行它。这可以在它们自己的批处理中执行查询,同时保持单个连接。我的Python Caller tramsformer是这样的:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65252308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档