在 SQL 服务器中结束过程创建的语法
Syntax for ending Procedure creation in SQL server
我想在 Begin-End-Block 中创建一个临时过程,然后 运行 使用不同参数的过程。我必须这样做,因为我不想在服务器上创建持久的过程,但我在获得正确的语法方面遇到了一些问题。
我想要的是这样的:
begin
create temp proc
declare some variables
call proc multiple times
end;
目前看起来像这样,但我遇到语法错误:
use mycontext
begin
CREATE PROC #my_procedure @period_name varchar(10), @from date, @to date
AS
begin
VeryLongMergeStatement;
end;
GO
declare @today date= GETDATE();
declare @other_date date = EOMONTH(GETDATE(), (-1 - 3));
declare more dates
#my_procedure 'period_title' @today @other_date
end;
我找到了 this 但它并没有真正帮助我。我尝试了很多不同的分号组合,m 有开始和结束,没有它,有 go 和没有它。它总是显示错误。
它可能只是一些小东西,但我找不到它。
您不能在编程块中创建临时存储过程。这是不允许的,所以这 returns 一个错误:
begin
create procedure #abc as begin print 2; end;
print 1;
end;
为什么? documentation 很清楚:
The CREATE PROCEDURE statement cannot be combined with other Transact-SQL statements in a single batch.
我应该补充一点,“批处理”不能中断 BEGIN
/END
块。
因此,简单的解决方法是在块外部 创建存储过程,然后使用它:
create procedure #abc as begin print 2; end;
begin
print 1;
exec #abc;
end;
你有几个问题。首先,a CREATE
/ALTER PROCEDURE
需要是批次中的东西;您之前有一个 USE
语句,因此它不是该批次中唯一的一个。你还有一个 BEGIN
在单独的批次中到 END
,这将导致错误。
最后,EXEC
的语法错误,您需要用逗号分隔参数 (,
)。这给你这样的东西(注释掉的部分使 SQL 有效):
USE sandbox;
GO
CREATE PROC #my_procedure @period_name varchar(10), @from date, @to date
AS
BEGIN
--VeryLongMergeStatement;
PRINT 1;
END;
GO
declare @today date= GETDATE();
declare @other_date date = EOMONTH(GETDATE(), (-1 - 3));
--declare more dates
EXEC #my_procedure 'period_title', @today, @other_date;
GO
DROP PROC #my_procedure;
我想在 Begin-End-Block 中创建一个临时过程,然后 运行 使用不同参数的过程。我必须这样做,因为我不想在服务器上创建持久的过程,但我在获得正确的语法方面遇到了一些问题。 我想要的是这样的:
begin
create temp proc
declare some variables
call proc multiple times
end;
目前看起来像这样,但我遇到语法错误:
use mycontext
begin
CREATE PROC #my_procedure @period_name varchar(10), @from date, @to date
AS
begin
VeryLongMergeStatement;
end;
GO
declare @today date= GETDATE();
declare @other_date date = EOMONTH(GETDATE(), (-1 - 3));
declare more dates
#my_procedure 'period_title' @today @other_date
end;
我找到了 this 但它并没有真正帮助我。我尝试了很多不同的分号组合,m 有开始和结束,没有它,有 go 和没有它。它总是显示错误。 它可能只是一些小东西,但我找不到它。
您不能在编程块中创建临时存储过程。这是不允许的,所以这 returns 一个错误:
begin
create procedure #abc as begin print 2; end;
print 1;
end;
为什么? documentation 很清楚:
The CREATE PROCEDURE statement cannot be combined with other Transact-SQL statements in a single batch.
我应该补充一点,“批处理”不能中断 BEGIN
/END
块。
因此,简单的解决方法是在块外部 创建存储过程,然后使用它:
create procedure #abc as begin print 2; end;
begin
print 1;
exec #abc;
end;
你有几个问题。首先,a CREATE
/ALTER PROCEDURE
需要是批次中的东西;您之前有一个 USE
语句,因此它不是该批次中唯一的一个。你还有一个 BEGIN
在单独的批次中到 END
,这将导致错误。
最后,EXEC
的语法错误,您需要用逗号分隔参数 (,
)。这给你这样的东西(注释掉的部分使 SQL 有效):
USE sandbox;
GO
CREATE PROC #my_procedure @period_name varchar(10), @from date, @to date
AS
BEGIN
--VeryLongMergeStatement;
PRINT 1;
END;
GO
declare @today date= GETDATE();
declare @other_date date = EOMONTH(GETDATE(), (-1 - 3));
--declare more dates
EXEC #my_procedure 'period_title', @today, @other_date;
GO
DROP PROC #my_procedure;