2

T-SQL に次のようなスクリプトがあります。

create table TableName (...)
SET IDENTITY INSERT TableName ON

そして2行目にエラーが発生します:

存在しないか権限がないため、オブジェクト "TableName" が見つかりません。

Management Studio 2005 から実行します。この 2 行の間に「GO」を入れると、動作します。しかし、完成したときにこのコードをアプリケーションに配置したいので、「GO」を使用しないでください。

私の質問は、「GO」を使用せずにこれを機能させて、C#アプリケーションからプログラムで実行できるようにする方法です。

4

5 に答える 5

9

プログラムでGOを使用しないと、2つの別々のデータベース呼び出しを行う必要があります。

于 2009-04-24T08:21:59.433 に答える
2

アプリケーションから 2 つの呼び出しを使用して、2 つのスクリプトを順番に実行します。

とにかく最初のスクリプトが正常に実行された場合にのみ、2 番目のスクリプトを実行する必要があります。したがって、最初のスクリプトを実行し、成功した場合は 2 番目のスクリプトを実行できます。テーブルは、使用する前に作成されている必要があります。そのため、管理スタジオで GO が必要です。

于 2009-04-24T08:23:28.353 に答える
2

BOL から: " SQL Server ユーティリティは、GO を、Transact-SQL ステートメントの現在のバッチを SQL Server に送信する必要があるというシグナルとして解釈します"。したがって、Jose Basilio がすでに指摘したように、データベース呼び出しを個別に行う必要があります。これが役立つ場合、私は同じ問題に直面しており、すべてのスクリプトをミニスクリプトの束に分割するために、少し (非常に基本的な) パーサーを作成する必要がありました。これらのスクリプトは、一度に 1 つずつデータベースに送信されます。

于 2009-04-24T09:12:08.253 に答える
1

tpdi の一時テーブルよりも優れているのは、変数テーブルです。それらは超高速で実行され、範囲外になると自動的にドロップされます。

これはあなたが1つを作る方法です

declare @TableName table (ColumnName int, ColumnName2 nvarchar(50))

次に、挿入するには、これを行うだけです

insert into @TableName (ColumnName, ColumnName2)
select 1, 'A'
于 2009-04-24T21:25:45.340 に答える
0

一時テーブルを作成し、それに対して必要なことを行うストアド プロシージャを作成することを検討してください。実際のテーブルを作成すると、テーブルも削除しない限り、アプリはスクリプトを複数回実行できなくなります。この場合、まさに一時テーブルの機能があります。

于 2009-04-24T08:35:48.450 に答える