使用临时表导入 SQL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我在 JMP 11.2.1 中使用存储过程和临时表时遇到了困难。我根本没有回报
db = 创建数据库连接("DRIVER=SQL Server;
服务器=本地服务器\SQLEXPRESS;
数据库=测试”
);
执行 SQL(db,
"
创建表#Test(ID int)
插入 INTO #Test (ID)
值 (1), (2), (3), (4), (5)
选择 *
来自#Test
删除表#Test
",
":-("
);
关闭数据库连接(db);
这个问题困扰了我一段时间。从外观上看,SAS 可以做到,所以我认为这不是 ODBC 的问题。
Re: 使用临时表导入 SQL文斯,
谢谢。寻找旧的 ODBC 2.0 下载是否有意义?我还没有多少运气。
Re: 使用临时表导入 SQL按照我的理解,这不是 JMP 方面要解决的。问题出在微软方面,因为他们的 ODBC 3.0 驱动程序调用它。正如你所说,他们可能会尝试检测#Tables,但我认为我不想中断脚本来告诉我我的 SQL 是以不可接受的方式编写的。向日志传递一些东西我可以看到它很有用。
Re: 使用临时表导入 SQL我注意到将每个查询部分的结果保存为文字 JMP 数据表,然后在 JSL 中手动加入它们似乎有时会起作用。虽然它确实会占用您的时间,但您将能够保持结果处于活动状态,直到您运行关闭数据表。
Re: 使用临时表导入 SQL感谢您的解释。但是,我不喜欢它的工作方式。我应该简单地能够接受在其他应用程序中运行良好的任何查询,并在 JMP/JSL 中运行时看到/预期相同的结果。
我已经阅读了这个线程并且有一点很清楚......讨论的解决方法,将所有临时表拆分为单独的查询,对于我们 JSL 开发人员来说不是一个好的解决方案。我有一个大的、较旧的查询,它工作得很好,我需要几个小时才能把它分开。那有什么意义呢?这是首选方法吗?我还注意到,在我的第一次查询拆分尝试中,JMP 没有将 OID 加载到新的数据表中。所以我不确定我是否可以拆分这个查询。如果我继续,我将无法加入空白的 OID 列......当我通过 SQL Server 运行这个相同的查询部分时,我的列确实有数据。
我也很惊讶这个话题是难的找到 - 它花了一些谷歌搜索。JSL 手册中应明确说明限制,但这是我第一次阅读它。我专门写了几个辅助函数——现在它们不是很有帮助。现在我意识到这是浪费时间。实际上,使用另一个应用程序写入 csv 并让 JMP 加载它会更快。这个软件并不便宜,所以我希望 Temp Tables/SQL 可以在 JMP 中工作,而不是需要外部应用程序来节省我的时间。
至少,我希望这个应用程序有更好的通知。如果 JMP 在 JSL 或“打开表 > 高级”平台中检测到临时表使用情况,可能会显示一条消息应该发送给开发人员以通知他们 JMP 无法处理该操作...?
该线程不再显示为活动... SAS/JMP 是否计划解决此问题?
Re: 使用临时表导入 SQL这可能不是你的错。JMP 12 中有一个错误导致存储过程不向 JMP 返回任何行(坦率地说,我不确定 Brian 是如何工作的)。它将在 12.1 维护版本中修复,该版本应该在几个月后发布。
更新: 我很困惑。关于存储过程不返回任何行的错误实际上在 JMP 12 中*不是* - 它是在 JMP 12.1 周期内引入并修复的。因此,您可能需要查看您的存储过程代码。我们已经看到了创建表然后从单个存储过程中选择表的场景,其中行不会返回给 JMP。
埃里克
Re: 使用临时表导入 SQL谢谢布赖恩,我一定是说错了。
Re: 使用临时表导入 SQL嗨文斯,
我不知道存储过程有问题。尽管我们在 SQL Server 上没有很多好的示例,但我能够在这里找到一个工作。我知道引用是一个大问题。你在看什么?
布赖恩
Re: 使用临时表导入 SQL谢谢布赖恩,这真的很丰富。
是否也是可能导致存储过程失败的同一问题?
Re: 使用临时表导入 SQL嗨文斯,
对于延迟回复,我很抱歉,但我想对此进行一些调查。不幸的是,这似乎是 Microsoft SQL Server ODBC 驱动程序(本地客户端和 Office 版本)的问题。当我们提交 SQL 时,表创建失败。使用 Mac 的 Actual Technologies SQL Server 驱动程序之类的驱动程序,就可以成功。我知道在旧版本的 JMP 中这会起作用,因为当时我们没有强制执行 ODBC 3.0。在 SQL Server 和其他数据库供应商中使用块获取需要此级别。块提取使大表的检索变得非常、非常快。然而,随之而来的是 TEMP 表的失败。这种初始化是在 JMP 启动时完成的,因此实际上不可能对 TEMP 表选择性地禁用它,即使我们可以解析 SQL 以检测 TEMP 表的使用情况。
我希望我能给你更好的消息。
布莱恩·科科伦
JMP开发
Re: 使用临时表导入 SQL那我就得听从 SQL Server 专家的意见了。
Re: 使用临时表导入 SQL没有 # 就不是临时表。
它在 SQL SERVER 中正常工作。
Re: 使用临时表导入 SQL我不是 SQL 服务器专家——我主要使用 Oracle。似乎 SQL 服务器不喜欢您的表的名称。尝试测试而不是#Test。
您是否在 SQL Server 控制台中验证了 SQL 命令?
Re: 使用临时表导入 SQL看起来它会在 Execute 完成后立即摆脱它。
[Microsoft][ODBC SQL Server Driver][SQL Server]无效的对象名称“#Test”。
[Microsoft][ODBC SQL Server Driver][SQL Server]无效的对象名称“#Test”。
[Microsoft][ODBC SQL Server Driver][SQL Server]无法删除表 '#Test',因为它不存在或您没有权限。
Re: 使用临时表导入 SQL尝试分离出每个 SQL 语句:
D b =创建数据库连接( “驱动程序=SQL服务器;
服务器=本地服务器\SQLEXPRESS;
数据库=测试”
) ;
sql1 = “创建表#Test(ID int)” ;
执行 SQL ( D b , sql1 ) ;
sql2 = “插入 #Test (ID) 值 (1)、(2)、(3)、(4)、(5)” ;
执行 SQL ( D b , sql2 ) ;
sql3 = “从#Test中选择*” ;
dt =执行 SQL ( D b , sql3 , “#测试” ) ;
sql4 = “删除表#Test” ;
执行 SQL ( D b , sql4 ) ;
关闭数据库连接( D b ) ;