有人可以解释通过 SSIS 和 VS 构建 ETL 时使用的“BypassPrepare”连接参数吗?
Can someone explain the `BypassPrepare` connection-parameter used when building an ETL via SSIS and VS?
If you set this option to true then the preparing (i.e. parsing) is done by the database engine you are connecting to. If you set this option to false then the preparation is done by integration services package.
This option is available only for OLEDB type connections and was introduced because pacakge (sql task) cannot prepare/parse all the SQL commands that OLEDB database supports. Meaning that you would get error in parse phase and would not be able to execute the statement that is valid statement on OLEDB database but cannot be prepared/parsed by SQL task.
~Dean Savović
老实说,我不明白这个答案。我是一个网络人,只是(慢慢地)学习数据仓库。
我的问题分为两部分:
1. 当 Dean 说 "prepare/parse," 时 parsing/preparing 是怎么回事?
2. 据我了解,OLEDB 是 API。对 OLEDB 接口的请求是否序列化?如果不是,什么会阻止 Visual Studio + SSIS 发送包含受支持命令的字符串?
我觉得我在这里遗漏了一些关于 OLEDB 连接的重要信息。我在这个主题上发现了另外 2 个 SO 问题,但都收到了重复上述引述的答案。
首先,重要的是要记住 BypassPrepare
是一个 属性 的 Execute SQL 任务,而不是数据库连接。
属性 允许您切换设计时 SQL 语法检查,这可以在您编写包时由 VS 自动为您完成。如果您打开检查并尝试设置句法不正确的 SQL 语句,组件编辑器将告诉您它对您的总体看法,尤其是您的 SQL 编码技能。
在禁用语法检查的情况下,您可以向任务提供任何类型的废话,并且在您尝试实际执行它之前什么也不会发生。在这种情况下,您将遇到 运行 次异常。
如果您像我和许多其他开发人员一样,首先在成熟的 SQL 编辑器(如 SSMS 或类似工具)中编造您的 SQL 语句,您可能不需要触摸该选项根本没有,并默认禁用此语法检查。
此 属性 的另一个问题是每次您尝试保存参数化 SQL 时它都会发出误报。我不确定它是否与 ADO.Net 一起正常工作,但如果 OLEDB 连接参数由问号指定,并且内置语法检查器似乎很高兴地不知道这部分组件的功能。
如果您在考虑 SSIS 是否切换到 prepared statements 并将此 属性 设置为 False,据我所知,它不会那样做。在 ETL 中,典型的查询通常 运行 一次,然后获取大部分或全部 table 的行。在执行前准备这样的声明不会获得任何收益。话虽如此,我实际上可能是错的;只需设置 Profiler / XEvents 跟踪即可验证这一点。
我的建议:保留默认值。
If you set this option to true then the preparing (i.e. parsing) is done by the database engine you are connecting to. If you set this option to false then the preparation is done by integration services package.
This option is available only for OLEDB type connections and was introduced because pacakge (sql task) cannot prepare/parse all the SQL commands that OLEDB database supports. Meaning that you would get error in parse phase and would not be able to execute the statement that is valid statement on OLEDB database but cannot be prepared/parsed by SQL task.
~Dean Savović
老实说,我不明白这个答案。我是一个网络人,只是(慢慢地)学习数据仓库。
我的问题分为两部分:
1. 当 Dean 说 "prepare/parse," 时 parsing/preparing 是怎么回事?
2. 据我了解,OLEDB 是 API。对 OLEDB 接口的请求是否序列化?如果不是,什么会阻止 Visual Studio + SSIS 发送包含受支持命令的字符串?
我觉得我在这里遗漏了一些关于 OLEDB 连接的重要信息。我在这个主题上发现了另外 2 个 SO 问题,但都收到了重复上述引述的答案。
首先,重要的是要记住 BypassPrepare
是一个 属性 的 Execute SQL 任务,而不是数据库连接。
属性 允许您切换设计时 SQL 语法检查,这可以在您编写包时由 VS 自动为您完成。如果您打开检查并尝试设置句法不正确的 SQL 语句,组件编辑器将告诉您它对您的总体看法,尤其是您的 SQL 编码技能。
在禁用语法检查的情况下,您可以向任务提供任何类型的废话,并且在您尝试实际执行它之前什么也不会发生。在这种情况下,您将遇到 运行 次异常。
如果您像我和许多其他开发人员一样,首先在成熟的 SQL 编辑器(如 SSMS 或类似工具)中编造您的 SQL 语句,您可能不需要触摸该选项根本没有,并默认禁用此语法检查。
此 属性 的另一个问题是每次您尝试保存参数化 SQL 时它都会发出误报。我不确定它是否与 ADO.Net 一起正常工作,但如果 OLEDB 连接参数由问号指定,并且内置语法检查器似乎很高兴地不知道这部分组件的功能。
如果您在考虑 SSIS 是否切换到 prepared statements 并将此 属性 设置为 False,据我所知,它不会那样做。在 ETL 中,典型的查询通常 运行 一次,然后获取大部分或全部 table 的行。在执行前准备这样的声明不会获得任何收益。话虽如此,我实际上可能是错的;只需设置 Profiler / XEvents 跟踪即可验证这一点。
我的建议:保留默认值。