1

在切换到 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?

4

0 回答 0