1

Microsoft JDBC ドライバー (4.0.2206) を使用する代わりに jTDS ドライバー (1.3) に切り替えると、奇妙な問題が発生しました。

サンプル コードの 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_prepexec は以前の手順が組み合わされているのに、sp_prepare と sp_execute が sp_prepexec と異なるのはなぜですか?

sp_prepare を実行しているときに、2 番目のクエリで #tmpTable が見つからないのはなぜですか?

4

0 に答える 0