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