web-dev-qa-db-ja.com

「CREATE PROCEDURE」はバッチ内の唯一のステートメントでなければなりません(Erro)

このテーブルを作成していますが、最初のプロシージャ(sp_joseview)で問題が発生しています

create table josecustomer(
name varchar(50),
address varchar(300),
ssnid int,
balance bigint,
accountnumber bigint
)

insert into josecustomer values('Aman','Canada',10000,5000,100000000)
insert into josecustomer values('Shubham','USA',10001,6000,200000000)
insert into josecustomer values('Himanshu','Australia',10002,2000,300000000)
insert into josecustomer values('Jose','India',10003,3000,400000000)
insert into josecustomer values('Albert','Brazil',10004,4000,500000000)
insert into josecustomer values('Peterson','Germany',10005,7000,600000000)
insert into josecustomer values('Adam','Honkong',10006,8000,700000000)
insert into josecustomer values('William','Paris',10007,9000,800000000)

select * from josecustomer

create proc sp_joseview
as begin
select * from josecustomer
end
go

create proc sp_updatejose
(@accountno bigint,@newbalance bigint)
as begin
update josecustomer 
set balance=@newbalance
where accountnumber=@accountno
end 
go

最初の手順で構文エラーが表示されていますが、そのエラーが何かはわかりません。

6
Joe Morales

エラーは自明です。バッチ内の唯一のステートメントでない限り、CREATE PROCEDUREステートメントを発行することはできません。

SSMSでは、GOキーワードによってステートメントが個別のバッチに分割されるため、ステートメントの後のCREATE PROCEDUREの前に1つ追加する必要があります。

create table josecustomer(
name varchar(50),
address varchar(300),
ssnid int,
balance bigint,
accountnumber bigint
)

insert into josecustomer values('Aman','Canada',10000,5000,100000000)
insert into josecustomer values('Shubham','USA',10001,6000,200000000)
insert into josecustomer values('Himanshu','Australia',10002,2000,300000000)
insert into josecustomer values('Jose','India',10003,3000,400000000)
insert into josecustomer values('Albert','Brazil',10004,4000,500000000)
insert into josecustomer values('Peterson','Germany',10005,7000,600000000)
insert into josecustomer values('Adam','Honkong',10006,8000,700000000)
insert into josecustomer values('William','Paris',10007,9000,800000000)

select * from josecustomer
Go  --Add a Go here

create proc sp_joseview
as begin
select * from josecustomer
end
go

create proc sp_updatejose
(@accountno bigint,@newbalance bigint)
as begin
update josecustomer 
set balance=@newbalance
where accountnumber=@accountno
end 
go
14
Siyual

キーワードGOは、単一のスクリプトでバッチを区切ります。このエラーは、_CREATE PROCEDURE_がバッチ内の「唯一の」ステートメントでなければならないことを示しているため、_CREATE PROCEDURE_のどこかにGOがないのは当然のことです。

今、あなたのスクリプトを見てください、それは4つの広い領域に分かれています

  1. テーブルを作成する
  2. いくつかのデータを挿入します(そしてもう一度選択します)
  3. プロシージャ1を作成
  4. プロシージャ2を作成

2〜3のgoがないことは明らかです。

8
Jamiec