【问题标题】:Incorrect syntax near the keyword 'DECLARE'. Incorrect syntax near the keyword 'AS'关键字“DECLARE”附近的语法不正确。关键字“AS”附近的语法不正确
【发布时间】:2016-06-08 22:45:19
【问题描述】:

使用以下代码,我不断收到以下错误:

关键字“DECLARE”附近的语法不正确。
关键字“AS”附近的语法不正确。

任何帮助将不胜感激!

DROP PROCEDURE [dbo].[csp_WellTestValidationResultsTEST_GetData]
GO
CREATE PROCEDURE [dbo].[csp_WellTestValidationResultsTEST_GetData]

DECLARE @ColumnName varchar(max);       --Column Name that Maps to AF Attribute
DECLARE @ColumnValue varchar(max);      --Specific Value for that Column
DECLARE @LeftNumber varchar(50) = SUBSTRING(@ColumnValue,0,CHARINDEX('-',@ColumnValue,0));
DECLARE @RightNumber varchar(50) = SUBSTRING(@ColumnValue,CHARINDEX('-',@ColumnValue,0)+1,LEN(@ColumnValue));
DECLARE @API varchar(50) = SUBSTRING(@ColumnName,0,CHARINDEX('-',@ColumnName,0));


AS
BEGIN
SET NOCOUNT ON;

IF (@ColumnName = 'API14-2')
       Exec('Select * from dbo.SSIS_RTRM_WellTestValidationResults where '+@API+' = '+@LeftNumber+' OR '+@API+' = '+@RightNumber+' order by TestDate Desc')   
Else 
    Select * From dbo.SSIS_RTRM_WellTestValidationResults where WellId = ''
  END

【问题讨论】:

  • 如果您使用的是 SQL Server,declares 会在 begin 之后。

标签: sql-server tsql stored-procedures


【解决方案1】:

正如“Gordon Linoff”所指出的,您的创建过程语句应该是

CREATE PROCEDURE [dbo].[csp_WellTestValidationResultsTEST_GetData]

AS
BEGIN
SET NOCOUNT ON;

DECLARE @ColumnName varchar(max);       --Column Name that Maps to AF Attribute
........

另一方面,我不确定您是否可以在相同的语句中声明和赋值,可能需要将其替换为:

DECLARE @LeftNumber varchar(50);
SET @LeftNumber = SUBSTRING(@ColumnValue,0,CHARINDEX('-',@ColumnValue,0));

等等

【讨论】:

  • 声明和分配取决于 SQL Server 的版本。
【解决方案2】:

要将变量传递给 sporc,请使用语法创建过程 {schema.procedure_name} {@variable1} {variable1_data_type}, {@variable2} {variable2_data_type} 作为 {此处为 SPROC}

如果你想要一个变量的默认值同时使变量可选,{variable} {vairable_data_type} = {variable_default_value}

这仅适用于您在调用存储过程时传递的变量。您在 sproc 中声明的 sproc 中定义的任何变量。

CREATE PROCEDURE [dbo].[csp_WellTestValidationResultsTEST_GetData]
@ColumnName varchar(max);       --Column Name that Maps to AF Attribute
,@ColumnValue varchar(max);      --Specific Value for that Column
AS
DECLARE @LeftNumber varchar(50) = SUBSTRING(@ColumnValue,0,CHARINDEX('-',@ColumnValue,0));
DECLARE @RightNumber varchar(50) = SUBSTRING(@ColumnValue,CHARINDEX('-',@ColumnValue,0)+1,LEN(@ColumnValue));
DECLARE @API varchar(50) = SUBSTRING(@ColumnName,0,CHARINDEX('-',@ColumnName,0));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2013-12-16
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2013-12-24
    相关资源
    最近更新 更多