1

次のSQLコマンドを使用して、ADO.NET接続マネージャーとDataReaderソースを作成しました。

select 
   'test' as testcol
INTO
   #tmp

select * from #tmp

DataReaderコンポーネントの更新ボタンをクリックすると、SqlException "Invalid objectname#tmp"が表示されます。SQLステートメント自体は明らかに有効であり、SQL ServerManagementStudioで適切に実行されます。また、接続マネージャーでDelayValidationを設定してみましたが、役に立ちませんでした。

4

3 に答える 3

2

INSERT または SELECT のエラーですか?

INSERT と SELECT の両方を含むコマンドを 1 つだけ発行する場合は、SELECT の前にセミコロンを付けてみてください。

OP コメントの後のEDIT
は、ストアド プロシージャ内のすべてのロジックをカプセル化します。

CREATE PROCEDURE YourProcedureName
AS
select 
   'test' as testcol
INTO
   #tmp

select * from #tmp

GO

アプリケーションで次の単一の SQL コマンドを実行します。

exec YourProcedureName

次のOPコメントの後に 編集

OPは、使用しているSQL Serverのバージョンを示していません。2005年以降の場合は、CTEを試してください。

;with CTEtemp as
(
select 
   'test' as testcol
)
select * from CTEtemp
于 2009-09-17T20:38:23.643 に答える
0

使用するsp_executesql

あなたのコマンドは

exec sp_executesql @statement=N'
select 
   ''test'' as testcol
INTO
   #tmp

select * from #tmp'

nvarchar 文字列 (したがって N) を使用し、一重引用符を二重にしてエスケープする必要があります。

私はあなたと同じ問題を抱えていましたが、これが私がそれを修正した方法です。

于 2016-01-27T00:20:32.007 に答える
0

これを「SELECT 'test' as testcol」に置き換えられなかったのはなぜですか? 関連する一時テーブルがあり、実際の SQL スクリプトではなく単一のステートメントを想定しているため、SSIS クエリ パーサーで問題が発生している可能性があります。または、上で共有しているものが説明のための例にすぎない場合は、次のようなものかもしれません:

SELECT *
  FROM (SELECT 'test' AS testcol)

ここで何を達成しようとしているのか、もしそうなら、一時テーブルが必要な理由を詳しく説明できますか?

于 2009-09-18T04:44:22.887 に答える