Sql 在远程数据库上创建存储过程时语法不正确

Sql 在远程数据库上创建存储过程时语法不正确,sql,sql-server,sql-server-2008,stored-procedures,Sql,Sql Server,Sql Server 2008,Stored Procedures,我试图在托管在远程服务器上的数据库上重新创建存储过程。 在本地创建同一SP时,我没有收到任何错误,但在尝试在远程服务器上创建SP时,我收到以下错误: Msg 102, Level 15, State 1, Procedure MySP, Line 26 Incorrect syntax near 'MERGE'. Msg 102, Level 15, State 1, Procedure MySP, Line 27 Incorrect syntax near 'S'. 这些错误在多个SP中重复

我试图在托管在远程服务器上的数据库上重新创建存储过程。 在本地创建同一SP时,我没有收到任何错误,但在尝试在远程服务器上创建SP时,我收到以下错误:

Msg 102, Level 15, State 1, Procedure MySP, Line 26
Incorrect syntax near 'MERGE'.
Msg 102, Level 15, State 1, Procedure MySP, Line 27
Incorrect syntax near 'S'.
这些错误在多个SP中重复出现,我在本地服务器上创建SP时没有收到这些错误。 知道那是什么吗? 以下是一个示例SP:

USE [MyDatabase]
GO
/****** Object:  StoredProcedure [dbo].[InsertContractorInfo]    Script Date: 11/07/2012 01:08:31 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
--exec [dbo].[InsertContractorInfo] 
CREATE PROCEDURE [dbo].[InsertContractorInfo]
(@CompanyName nvarchar(50), 
 @LicenseNumber nvarchar(50),
 @MailingAddress1 nvarchar(200),
 @MailingAddress2 nvarchar(200),
 @Phone nvarchar(10),
 @Fax nvarchar(10),
 @Mobile nvarchar(10),
 @Email nvarchar(200),
 @PercentCommercial int,
 @PercentResidental int,
 @TotalEmployees int,
 @AnnualSales decimal(18,2),
 @InsuranceCompanyContact nvarchar(100)=null,
 @InsuranceCompanyContactEmail nvarchar(100)=null,
 @InsuranceCompanyContactPhone nvarchar(100)=null,
 @ContractorID uniqueidentifier)
AS
BEGIN
MERGE dbo.Contractor con
USING(SELECT 1 S) S
ON con.Oid = @ContractorID
WHEN MATCHED THEN UPDATE 
   SET       
      [CompanyName] = @CompanyName      
      ,[LicenseNumber] = @LicenseNumber
      ,[MailingAddress1] = @MailingAddress1
      ,[MailingAddress2] = @MailingAddress2
      ,[Phone] = @Phone
      ,[Fax] = @Fax
      ,[EMail] =@Email
      ,[Mobile] =@Mobile      
      ,[PercentCommercial] = @PercentCommercial
      ,[PercentResidental] = @PercentResidental
      ,[TotalEmployees] = @TotalEmployees
      ,[ApproximateAnnualSales] = @AnnualSales      
      ,[InsuranceCompanyContact] = @InsuranceCompanyContact
      ,[InsuranceCompanyContactPhone] = @InsuranceCompanyContactPhone
      ,[InsuranceCompanyContactEmail] = @InsuranceCompanyContactEmail      
WHEN NOT MATCHED THEN
INSERT 
           ([Oid]       
           ,[CompanyName]           
           ,[LicenseNumber]
           ,[MailingAddress1]
           ,[MailingAddress2]
           ,[Phone]
           ,[Fax]
           ,[EMail]
           ,[Mobile]                      
           ,[PercentCommercial]
           ,[PercentResidental]
           ,[TotalEmployees]
           ,[ApproximateAnnualSales]                      
           ,[InsuranceCompanyContact]
           ,[InsuranceCompanyContactPhone]
           ,[InsuranceCompanyContactEmail])
     VALUES
           (@ContractorId           
           ,@CompanyName           
           ,@LicenseNumber
           ,@MailingAddress1
           ,@MailingAddress2
           ,@Phone
           ,@Fax
           ,@EMail
           ,@Mobile
           ,@PercentCommercial
           ,@PercentResidental
           ,@TotalEmployees
           ,@AnnualSales                     
           ,@InsuranceCompanyContact
           ,@InsuranceCompanyContactPhone
           ,@InsuranceCompanyContactEmail
           );
END
GO
使用[MyDatabase]
去
/******对象:StoredProcess[dbo].[InsertContractorInfo]脚本日期:11/07/2012 01:08:31******/
将ANSI_空值设置为ON
去
在上设置带引号的\u标识符
去
-- =============================================
--作者:
--创建日期:
--说明:
-- =============================================
--exec[dbo].[InsertContractorInfo]
创建过程[dbo]。[InsertContractorInfo]
(@CompanyName nvarchar(50),
@许可证号码nvarchar(50),
@邮寄地址1 nvarchar(200),
@邮寄地址2 nvarchar(200),
@电话nvarchar(10),
@传真至nvarchar(10),
@移动nvarchar(10),
@电子邮件nvarchar(200),
@百分位,
@百分位数,
@全员,
@年销售额十进制(18,2),
@保险公司联系人nvarchar(100)=空,
@保险公司ContactEmail nvarchar(100)=空,
@保险公司ContactPhone nvarchar(100)=空,
@合同ID(唯一标识符)
作为
开始
合并dbo承包商合同
使用(选择1 S)S
ON con.Oid=@ContractorID
匹配后再更新
设置
[CompanyName]=@CompanyName
,[LicenseNumber]=@LicenseNumber
,[MailingAddress1]=@MailingAddress1
,[MailingAddress2]=@MailingAddress2
,[Phone]=@Phone
,[传真]=@传真
,[EMail]=@EMail
,[Mobile]=@Mobile
,[PercentCommercial]=@PercentCommercial
,[PercentResidental]=@PercentResidental
,[TotalEmployees]=@TotalEmployees
,[近似年销售额]=@年销售额
,[InsuranceCompanyContact]=@InsuranceCompanyContact
,[InsuranceCompanyContactPhone]=@InsuranceCompanyContactPhone
,[InsuranceCompanyContactEmail]=@InsuranceCompanyContactEmail
当不匹配时
插入
([Oid]
,[公司名称]
,[持牌人编号]
,[邮寄地址1]
,[邮寄地址2]
,[电话]
,[传真]
,[电邮]
,[流动电话]
,[商业百分比]
,[居民百分比]
,[TotalEmployees]
,[近似年销售额]
,[保险公司合同]
,[保险公司联系电话]
,[InsuranceCompanyContactEmail])
价值观
(@ContractorId)
,@CompanyName
,@持牌人编号
,@mailingaddress 1
,@mailingaddress 2
,@电话
,@传真
,@电子邮件
,@Mobile
,@PercentCommercial
,@Percentental
,@TotalEmployees
,@AnnualSales
,@InsuranceCompanyContact
,@InsuranceCompanyContactPhone
,@InsuranceCompanyContactEmail
);
结束
去

谢谢,Laziale

此合并功能适用于sql server 2008+版本,如果您尝试在sql server 2005中使用此合并功能,您可以在2005年进行类似的合并模拟


您也可以在创建过程脚本之前尝试此操作

使用[MyDatabase] 去 如果存在(从SysObjects中选择名称,其中ID=OBJECT\u ID(N'[InsertContractorInfo]')) 开始 删除过程InsertContractorInfo 结束
转到

检查您的sql server版本。如果我记得的话,这项功能是在2008年推出的。