Sql 无法在生产环境中创建在本地测试机中工作的存储过程

Sql 无法在生产环境中创建在本地测试机中工作的存储过程,sql,sql-server,Sql,Sql Server,我有一个SQL CREATE PROCEDURE语句,它在本地SQL Server中运行良好,但无法在生产环境中重新创建。我在生产中收到的错误消息是Msg 102,级别15,状态1,靠近“=”的语法不正确 这是一个相当大的查询,我不想打扰StackOverflow用户,但我根本找不到解决方案。如果您能指出我可以在生产服务器中检查哪些设置,以便能够运行代码。。。我必须使用某种语法或与生产中的某些设置相冲突的东西。这个过程以前已经在生产环境中注册过,但是当我今天运行DROP-CREATE过程时,服务

我有一个SQL CREATE PROCEDURE语句,它在本地SQL Server中运行良好,但无法在生产环境中重新创建。我在生产中收到的错误消息是Msg 102,级别15,状态1,靠近“=”的语法不正确

这是一个相当大的查询,我不想打扰StackOverflow用户,但我根本找不到解决方案。如果您能指出我可以在生产服务器中检查哪些设置,以便能够运行代码。。。我必须使用某种语法或与生产中的某些设置相冲突的东西。这个过程以前已经在生产环境中注册过,但是当我今天运行DROP-CREATE过程时,服务器可以删除这个过程,但不能重新创建它

我将粘贴下面的代码。谢谢大家!

===============

USE [Enorway]
GO

/****** Object:  StoredProcedure [dbo].[Spel_CM_ChartsUsersTotals]    Script Date: 03/17/2010 11:59:57 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROC [dbo].[Spel_CM_ChartsUsersTotals]
    @IdGroup int,
    @IdAssessment int,
    @UserId int
AS
SET NOCOUNT ON

DECLARE @RequiredColor varchar(6)
SET @RequiredColor = '3333cc'

DECLARE @ManagersColor varchar(6)
SET @ManagersColor = '993300'

DECLARE @GroupColor varchar(6)
SET @GroupColor = 'ff0000'

DECLARE @SelfColor varchar(6)
SET @SelfColor = '336600'

DECLARE @TeamColor varchar(6)
SET @TeamColor = '993399'

DECLARE @intMyCounter tinyint
DECLARE @intManagersPosition tinyint
DECLARE @intGroupPosition tinyint
DECLARE @intSelfPosition tinyint
DECLARE @intTeamPosition tinyint
SET @intMyCounter = 1


-- Table that will hold the subtotals...
DECLARE @tblTotalsSource table
(
    IdCompetency int,
    CompetencyName nvarchar(200),
    FunctionRequiredLevel float,
    ManagersAverageAssessment float,
    SelfAssessment float,
    GroupAverageAssessment float,
    TeamAverageAssessment float
)

INSERT INTO @tblTotalsSource
(
    IdCompetency,
    CompetencyName,
    FunctionRequiredLevel,
    ManagersAverageAssessment,
    SelfAssessment,
    GroupAverageAssessment,
    TeamAverageAssessment
)

SELECT
    e.[IdCompetency],
    dbo.replaceAccentChar(e.[Name]) AS CompetencyName,
    (i.[LevelNumber]) AS FunctionRequiredLevel,
    (
        SELECT
            ROUND(avg(CAST(ac.[LevelNumber] AS float)),0)
        FROM
            Spel_CM_AssessmentsData aa
            INNER JOIN Spel_CM_CompetenciesLevels ab ON aa.[IdCompetencyLevel] = ab.[IdCompetencyLevel]
            INNER JOIN Spel_CM_Levels ac ON ab.[IdLevel] = ac.[IdLevel]
            INNER JOIN Spel_CM_AssessmentsEvents ad ON aa.[IdAssessmentEvent] = ad.[IdAssessmentEvent]
        WHERE
            aa.[EvaluatedUserId] = @UserId AND
            aa.[AssessmentType] = 't' AND
            aa.[IdGroup] = @IdGroup AND
            ab.[IdCompetency] = e.[IdCompetency] AND
            ad.[IdAssessment] = @IdAssessment
    ) AS ManagersAverageAssessment,
    (
        SELECT 
            bc.[LevelNumber]
        FROM
            Spel_CM_AssessmentsData ba
            INNER JOIN Spel_CM_CompetenciesLevels bb ON ba.[IdCompetencyLevel] = bb.[IdCompetencyLevel]
            INNER JOIN Spel_CM_Levels bc ON bb.[IdLevel] = bc.[IdLevel]
            INNER JOIN Spel_CM_AssessmentsEvents bd ON ba.[IdAssessmentEvent] = bd.[IdAssessmentEvent]
        WHERE
            ba.[EvaluatedUserId] = @UserId AND
            ba.[AssessmentType] = 's' AND
            ba.[IdGroup] = @IdGroup AND
            bb.[IdCompetency] = e.[IdCompetency] AND
            bd.[IdAssessment] = @IdAssessment
    ) AS SelfAssessment,
    (
        SELECT
            ROUND(avg(CAST(cc.[LevelNumber] AS float)),0)
        FROM
            Spel_CM_AssessmentsData ca
            INNER JOIN Spel_CM_CompetenciesLevels cb ON ca.[IdCompetencyLevel] = cb.[IdCompetencyLevel]
            INNER JOIN Spel_CM_Levels cc ON cb.[IdLevel] = cc.[IdLevel]
            INNER JOIN Spel_CM_AssessmentsEvents cd ON ca.[IdAssessmentEvent] = cd.[IdAssessmentEvent]
        WHERE
            ca.[EvaluatedUserId] = @UserId AND
            ca.[AssessmentType] = 'g' AND
            ca.[IdGroup] = @IdGroup AND
            cb.[IdCompetency] = e.[IdCompetency] AND
            cd.[IdAssessment] = @IdAssessment
    ) AS GroupAverageAssessment,
    (
        SELECT
            ROUND(avg(CAST(dc.[LevelNumber] AS float)),0)
        FROM
            Spel_CM_AssessmentsData da
            INNER JOIN Spel_CM_CompetenciesLevels db ON da.[IdCompetencyLevel] = db.[IdCompetencyLevel]
            INNER JOIN Spel_CM_Levels dc ON db.[IdLevel] = dc.[IdLevel]
            INNER JOIN Spel_CM_AssessmentsEvents dd ON da.[IdAssessmentEvent] = dd.[IdAssessmentEvent]
        WHERE
            da.[EvaluatedUserId] = @UserId AND
            da.[AssessmentType] = 'm' AND
            da.[IdGroup] = @IdGroup AND
            db.[IdCompetency] = e.[IdCompetency] AND
            dd.[IdAssessment] = @IdAssessment
    ) AS TeamAverageAssessment
FROM
    Spel_CM_AssessmentsData a
    INNER JOIN Spel_CM_AssessmentsEvents c ON a.[IdAssessmentEvent] = c.[IdAssessmentEvent]
    INNER JOIN Spel_CM_CompetenciesLevels d ON a.[IdCompetencyLevel] = d.[IdCompetencyLevel]
    INNER JOIN Spel_CM_Competencies e ON d.[IdCompetency] = e.[IdCompetency]
    INNER JOIN Spel_CM_Levels f ON d.[IdLevel] = f.[IdLevel]
    -- This will link with user's assigned functions
    INNER JOIN Spel_CM_FunctionsCompetenciesLevels g ON a.[IdFunction] = g.[IdFunction]
    INNER JOIN Spel_CM_CompetenciesLevels h ON g.[IdCompetencyLevel] = h.[IdCompetencyLevel] AND e.[IdCompetency] = h.[IdCompetency]
    INNER JOIN Spel_CM_Levels i ON h.[IdLevel] = i.[IdLevel]
WHERE
    (NOT c.[EndDate] IS NULL) AND
    a.[EvaluatedUserId] = @UserId AND
    c.[IdAssessment] = @IdAssessment AND
    a.[IdGroup] = @IdGroup
GROUP BY
    e.[IdCompetency],
    e.[Name],
    i.[LevelNumber]
ORDER BY
    e.[Name] ASC


-- This will define the position of each element (managers, group, self and team)
SELECT @intManagersPosition = @intMyCounter FROM @tblTotalsSource WHERE NOT ManagersAverageAssessment IS NULL
IF IsNumeric(@intManagersPosition) = 1 BEGIN SELECT @intMyCounter += 1 END

SELECT @intGroupPosition = @intMyCounter FROM @tblTotalsSource WHERE NOT GroupAverageAssessment IS NULL
IF IsNumeric(@intGroupPosition) = 1 BEGIN SELECT @intMyCounter += 1 END

SELECT @intSelfPosition = @intMyCounter FROM @tblTotalsSource WHERE NOT SelfAssessment IS NULL
IF IsNumeric(@intSelfPosition) = 1 BEGIN SELECT @intMyCounter += 1 END

SELECT @intTeamPosition = @intMyCounter FROM @tblTotalsSource WHERE NOT TeamAverageAssessment IS NULL


-- This will render the final table for the end user. The tabe will flatten some of the numbers to allow them to be prepared for Google Graphics.
SELECT
    SUBSTRING( 
        (
            SELECT
                ( '|' + REPLACE(ma.[CompetencyName],' ','+'))
            FROM
                @tblTotalsSource ma
            ORDER BY
                ma.[CompetencyName] DESC
            FOR XML PATH('')
        ), 2, 1000) AS 'CompetenciesNames',
    SUBSTRING(
        (
            SELECT
                ( ',' + REPLACE(ra.[FunctionRequiredLevel]*10,' ','+'))
            FROM
                @tblTotalsSource ra
            FOR XML PATH('')
        ), 2, 1000) AS 'FunctionRequiredLevel',
    SUBSTRING( 
        (
            SELECT
                ( ',' + CAST(na.[ManagersAverageAssessment]*10 AS nvarchar(10)))
            FROM
                @tblTotalsSource na
            FOR XML PATH('')
        ), 2, 1000) AS 'ManagersAverageAssessment',
    SUBSTRING( 
        (
            SELECT
                ( ',' + CAST(oa.[GroupAverageAssessment]*10 AS nvarchar(10)))
            FROM
                @tblTotalsSource oa
            FOR XML PATH('')
        ), 2, 1000) AS 'GroupAverageAssessment',
    SUBSTRING( 
        (
            SELECT
                ( ',' + CAST(pa.[SelfAssessment]*10 AS nvarchar(10)))
            FROM
                @tblTotalsSource pa
            FOR XML PATH('')
        ), 2, 1000) AS 'SelfAssessment',
    SUBSTRING( 
        (
            SELECT
                ( ',' + CAST(qa.[TeamAverageAssessment]*10 AS nvarchar(10)))
            FROM
                @tblTotalsSource qa
            FOR XML PATH('')
        ), 2, 1000) AS 'TeamAverageAssessment',
    SUBSTRING( 
        (
            SELECT
                ( '|t++' + CAST([FunctionRequiredLevel] AS varchar(10)) + ',' + @RequiredColor + ',0,' + CAST(ROW_NUMBER() OVER(ORDER BY CompetencyName) - 1 AS varchar(2)) + ',9')
            FROM
                @tblTotalsSource
            FOR XML PATH('')
        ), 2, 1000) AS 'FunctionRequiredAverageLabel',
    SUBSTRING( 
        (
            SELECT
                ( '|t++' + CAST([ManagersAverageAssessment] AS varchar(10)) + ',' + @ManagersColor + ',' + CAST(@intManagersPosition AS varchar(2)) + ',' + CAST(ROW_NUMBER() OVER(ORDER BY CompetencyName) - 1 AS varchar(2)) + ',9')
            FROM
                @tblTotalsSource
            FOR XML PATH('')
        ), 2, 1000) AS 'ManagersLabel',
    SUBSTRING( 
        (
            SELECT
                ( '|t++' + CAST([GroupAverageAssessment] AS varchar(10)) + ',' + @GroupColor + ',' + CAST(@intGroupPosition AS varchar(2)) + ',' + CAST(ROW_NUMBER() OVER(ORDER BY CompetencyName) - 1 AS varchar(2)) + ',9')
            FROM
                @tblTotalsSource
                FOR XML PATH('')
        ), 2, 1000) AS 'GroupLabel',
    SUBSTRING( 
        (
            SELECT
                ( '|t++' + CAST([SelfAssessment] AS varchar(10)) + ',' + @SelfColor + ',' + CAST(@intSelfPosition AS varchar(2)) + ',' + CAST(ROW_NUMBER() OVER(ORDER BY CompetencyName) - 1 AS varchar(2)) + ',9')
            FROM
                @tblTotalsSource
            FOR XML PATH('')
        ), 2, 1000) AS 'SelfLabel',
    SUBSTRING( 
        (
            SELECT
                ( '|t++' + CAST([TeamAverageAssessment] AS varchar(10)) + ',' + @TeamColor + ',' + CAST(@intTeamPosition AS varchar(2)) + ',' + CAST(ROW_NUMBER() OVER(ORDER BY CompetencyName) - 1 AS varchar(2)) + ',10')
            FROM
                @tblTotalsSource
            FOR XML PATH('')
        ), 2, 1000) AS 'TeamLabel',
        (Count(src.[IdCompetency]) * 30) + 100 AS 'ControlHeight'
FROM 
    @tblTotalsSource src


SET NOCOUNT OFF
GO

您是否分别错过了程序的开始和结束


创建过程blabla作为开始。。。。结束

在开始和结束过程中,您是否分别错过了开始和结束


创建过程blabla作为开始。。。。end

如果SQL没有给您行号,请尝试注释出不同的语句并重新运行命令

如果SQL没有给您行号,请尝试注释出不同的语句并重新运行命令

在存储过程中搜索此字符串的实例:+=您有一些实例。T-SQL不支持此组合运算符

因此,与此相反:

SELECT @intMyCounter += 1
您将需要执行以下操作:

SELECT @intMyCounter = @intMyCounter + 1

在存储过程中搜索此字符串的实例:+=您有几个实例。T-SQL不支持此组合运算符

因此,与此相反:

SELECT @intMyCounter += 1
您将需要执行以下操作:

SELECT @intMyCounter = @intMyCounter + 1

在SQLServerManagementStudio中运行创建过程脚本时,如果出现错误,请双击错误消息,它通常会将您带到发生错误的行。有时这只是长SELECT查询的第一行,但在本例中这是相当明显的,因为如果

您不能在以下行中使用+=:

如果IsNumeric@intManagersPosition=1开始选择@intMyCounter+=1结束

应该是:

如果IsNumeric@intManagersPosition=1开始选择@intMyCounter=@intMyCounter+1结束


执行此操作三次,然后修复,就可以开始了。

在sql server management studio中运行创建过程脚本时,如果出现错误,请双击错误消息,它通常会将您带到发生错误的行。有时这只是长SELECT查询的第一行,但在本例中这是相当明显的,因为如果

您不能在以下行中使用+=:

如果IsNumeric@intManagersPosition=1开始选择@intMyCounter+=1结束

应该是:

如果IsNumeric@intManagersPosition=1开始选择@intMyCounter=@intMyCounter+1结束


执行此操作三次,然后修复,就可以开始了。

在SSMS中,您可以双击错误消息,它会将您带到检测到错误的行,而不是100%检测到错误的行。如果您将给定的代码粘贴到自己的SSM中,您不需要数据库中的任何表等,并单击工具栏中的“解析”复选标记,您将得到3个错误,双击它们以转到存在错误的实际行,我在回答中显示了这些错误。对不起,它给了我一个行号,我只是忘了在这里发布它。将递增方法从+=1更改为this=this+1就成功了。谢谢。在SSMS中,您可以双击错误消息,它会将您带到检测到错误的行,而不是100%检测到错误的行。如果您将给定的代码粘贴到自己的SSM中,您不需要数据库中的任何表等,并单击工具栏中的“解析”复选标记,您将得到3个错误,双击它们以转到存在错误的实际行,我在回答中显示了这些错误。对不起,它给了我一个行号,我只是忘了在这里发布它。将递增方法从+=1更改为this=this+1就成功了。谢谢。SQL 2008支持组合运算符,但2005年不支持。嘿,谢谢!成功了!为什么你认为这对我在当地有效?我的本地SQL Server是2008。在生产中,我认为也是如此,但我不是100%确定…@Marcos Buarque-您的生产服务器不是SQL server 2008,或者是在较低的兼容模式下运行。由于提供了不正确的信息,被否决。+=在2008年受支持,但在2005年不受支持。这可能是用户的问题。您好,您好,生产是SQL Server 2005,这就是为什么在我的本地SQL Server中使用的语法不适合生产。谢谢。SQL 2008支持组合运算符,但2005年不支持。嘿,谢谢!成功了!为什么你认为这对我在当地有效?我的本地SQL Server是2008。
在生产中,我认为也是如此,但我不是100%确定…@Marcos Buarque-您的生产服务器不是SQL server 2008,或者是在较低的兼容模式下运行。由于提供了不正确的信息,被否决。+=在2008年受支持,但在2005年不受支持。这可能是用户的问题。您好,您好,生产是SQL Server 2005,这就是为什么在我的本地SQL Server中使用的语法不适合生产。谢谢。是的,这的确是个问题,你说得对。它确实起作用了-是的,这的确是个问题,你是对的。它确实起作用了-+1,实际给出了错误消息和完整的代码+1,实际给出了错误消息和完整的代码!