sp_prepare失败,SELECT * INTO #tmpTable但不是sp_prepexec

时间:2012-12-21 11:06:50

标签: sql-server sql-server-2005 jdbc prepared-statement jtds

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

0 个答案:

没有答案