-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
      ,[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

ありがとう、ラツィオ

4

2 に答える 2

0

このマージ機能は、SQLサーバー2008以降のバージョンで機能します。SQLServer2005で使用しようとしている場合は、2005年のこのマージ模倣のように行うことができます。

http://sqlserver-tips.blogspot.com/2006/09/mimicking-merge-statement-in-sql.html

于 2012-11-07T00:41:42.050 に答える
0

これは、CREATEPROCEDUREスクリプトの前にも試すことができます。

USE [MyDatabase] GO IF EXISTS(SELECT Name FROM SysObjects WHERE ID = OBJECT_ID(N'[InsertContractorInfo]'))BEGIN DROP PROCEDURE InsertContractorInfo END GO

于 2012-11-07T05:50:15.007 に答える