2

一時テーブルが既に存在するかどうか、プロシージャが最初にチェックすることを望みます。存在する場合は、テーブルをドロップして、テーブルへの選択に進みます。しかし、私はこのエラーが発生しました:

'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.

私のコードは次のようになります。

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[GetData]
    @Param_Id int
AS
BEGIN

If OBJECT_ID('temp_table') is not null
drop table temp_table

select data_info into temp_table
from data_info_table1

END

しかし、私は同じエラーが発生し続けます。助言がありますか?

4

7 に答える 7

0

スクリプトが以下のような場合、同じエラーメッセージが表示されます。つまり、GOステートメントが欠落しています。

if Exists(select object_id from sys.objects where name = 'GetData' and type = 'p')
Begin
    Drop Proc GetData
End
GO --Missing part
CREATE PROCEDURE [dbo].[GetData]
@Param_Id int
AS
BEGIN
    If OBJECT_ID('temp_table') is not null
       drop table temp_table

    select data_info into temp_table from data_info_table1
END
于 2012-06-05T15:53:02.297 に答える
0

コンパイル エラーがあります。本当にこのプロシージャを作成したい場合、およびテーブル temp_table が実際に tamp テーブルである場合は、プロシージャを作成する前に削除してみてください。このような:

If OBJECT_ID('temp_table') is not null
drop table temp_table
go

create PROCEDURE [dbo].[GetData]
    @Param_Id int
AS
BEGIN

If OBJECT_ID('temp_table') is not null
drop table temp_table

select data_info into temp_table
from data_info_table1

END

または、#table、##table、@table などの一時テーブルを実際に使用する

于 2015-05-15T15:07:09.387 に答える
0

DROP TABLE の後に GO を入れてみてください。IF OBJECT_ID( ) IS NOT NULL DROP TABLE ** は常に単独で機能するとは限りませんが、GO を使用すると信頼できるように見えます: IF OBJECT_ID( ) IS NOT NULL DROP TABLE ** GO

于 2014-05-14T21:30:39.057 に答える
0

手順を Null に対応させますか? プロシージャ内で Set Ansi Null On を設定してみてください。

また、これを手動で実行している場合は、最初にそのコードのみを選択して実行し、次にストアド プロシージャのみを選択して個別に実行することで、オプションを変更できます。

于 2012-06-05T14:18:09.677 に答える
0

GO コマンドは、T-SQL ステートメントのバッチの終わりを示します。GO コマンドの後のステートメントは、クエリまたは T-SQL ステートメントの新しいバッチの開始を示します。したがって、最初の GO コマンドを削除し、CREATE ステートメントの前のコマンドを保持することをお勧めします。これにより、後続のクエリ バッチの最初のステートメントになります。

ステートメントは以下のようになります

SET ANSI_NULLS ON

SET QUOTED_IDENTIFIER ON

GO
CREATE PROCEDURE [dbo].[GetData] @Param_Id int
AS
BEGIN

If OBJECT_ID('temp_table') IS NOT NULL DROP table temp_table

SELECT data_info INTO temp_table FROM data_info_table1

END
GO
于 2013-09-09T12:18:23.217 に答える
-1

これでストアドプロシージャを変更するとどうなりますか?:

CREATE PROCEDURE [dbo].[GetData]
    @Param_Id int
AS
BEGIN

If EXISTS(SELECT * FROM sys.tables WHERE name = 'temp_table')
BEGIN
    drop table temp_table
END

DECLARE @SQL VARCHAR(1000)
SET @SQL = '
select data_info into temp_table
from data_info_table1'

EXEC(@SQL)

END
于 2012-06-05T14:05:57.187 に答える