2012-11-07 40 views
-1

我想重新创建远程服务器上承载的数据库上的存储过程。 当创建同一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 protected] 
     ,[Mobile] [email protected]  
     ,[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 

感谢,Laziale

+1

检查SQL Server版本。如果我记得,这个功能在2008年推出。 –

回答

0

你可以试试这个之前也CREATE PROCEDURE脚本。

USE [MyDatabase的] GO IF EXISTS(SELECT姓名FROM SYSOBJECTS WHERE ID = OBJECT_ID(N '[InsertContractorInfo]')) BEGIN DROP PROCEDURE InsertContractorInfo END GO