切换到jTDS驱动程序(1.3)而不是使用Microsoft JDBC驱动程序(4.0.2206)时遇到了一个奇怪的问题。
以下是示例代码的DDL:
CREATE TABLE [dbo].[Test] (
[Id] int IDENTITY(1,1) NOT NULL,
[Value] varchar(10) NOT NULL
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED([Id])
) ON [PRIMARY]
INSERT INTO Test([Value]) VALUES('1')
INSERT INTO Test([Value]) VALUES('2')
在打开探查器的情况下运行代码后,我看到MS驱动程序正在执行(哪个工作):
declare @p1 int
set @p1=null
exec sp_prepexec @p1 OUTPUT, NULL, N'SELECT *
INTO #tmpTable
FROM Test
SELECT * FROM #tmpTable
DROP TABLE #tmpTable'
和jTDS问题(提供“无效对象名称'#tmpTable'”(并且在java中没有引发异常)):
declare @p1 int
set @p1=null
exec sp_prepare @p1 OUTPUT, NULL, N'SELECT *
INTO #tmpTable
FROM Test
SELECT * FROM #tmpTable
DROP TABLE #tmpTable'
exec sp_execute @p1
为什么sp_prepare和sp_execute与sp_prepexec不同,根据文档sp_prepexec是以前的程序组合?
为什么在执行sp_prepare时不能在第二个查询中找到#tmpTable?