SQL Server:合并语句编译错误

时间:2016-01-07 08:40:45

标签: sql-server stored-procedures sql-merge

我在我的存储过程中使用了SQL Server MERGE语句,在编译存储过程时出现了这样的错误:

  

对象参考[dbo]。[学生]。[ID]仅根据具体情况而有所不同   对象定义[dbo]。[学生]。[Id]。

我的表结构是:

CREATE TABLE [dbo].[Student] 
(
    [Id]        INT          NOT NULL,
    [FirstName] VARCHAR (50) NULL,
    [LastName]  VARCHAR (50) NULL,
    [StateID]   INT          NULL,
    [CityID]    INT          NULL,
    [IsActive]  BIT          NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
)

我的存储过程是:

CREATE PROCEDURE [dbo].USP_UpdateStudent
AS
    Declare @Data xml  

    SET @Data = '<?xml version="1.0" encoding="utf-16"?>
                 <Students>  
                    <Student>    
                       <ID>2</ID>    
                       <FirstName>Tridip</FirstName>    
                       <LastName>Bhattacharjee</LastName>    
                       <IsActive>true</IsActive>    
                       <StateID>2</StateID>    
                       <CityID>4</CityID>  
                    </Student>
                 </Students>'  
    BEGIN TRY
        MERGE INTO Student as Trg  
        USING (SELECT
                   d.x.value('id[1]', 'varchar(MAX)') as ID,
                   d.x.value('FirstName[1]', 'varchar(MAX)') as FirstName ,  
                   d.x.value('LastName[1]', 'varchar(MAX)') as LastName,
                   d.x.value('StateID[1]','int') as StateID,
                   d.x.value('CityID[1]','int') as CityID,
                   d.x.value('IsActive[1]','bit') as IsActive
               FROM
                   @data.nodes('/Students/Student') as  d(x)) AS Src ON Trg.ID = Src.ID  

        WHEN MATCHED THEN
            UPDATE 
            SET Trg.FirstName = Src.FirstName,  
                Trg.LastName = Src.LastName,
                Trg.StateID = Src.StateID,
                Trg.CityID = Src.CityID,
                Trg.IsActive = Src.IsActive

        WHEN NOT MATCHED BY TARGET THEN
            INSERT (FirstName, LastName, StateID, CityID, IsActive) 
            VALUES(Src.FirstName, Src.LastName, Src.StateID, Src.CityID, Src.IsActive);   
    END TRY
    BEGIN CATCH
      -- Insert Error into table
      --INSERT INTO #error_log(message)
      --VALUES (ERROR_MESSAGE());
    END CATCH

导致此错误的错误是什么?感谢

修改

通过SSMS和LinqPad连接sql compact db有2个很好的链接。这是链接

https://stackoverflow.com/a/16692386/728750 https://dba.stackexchange.com/questions/47534/how-do-i-view-a-microsoft-sql-server-compact-database

由于

2 个答案:

答案 0 :(得分:1)

这不是SQL Server错误,只是来自开发工具的警告。它告诉您,您与对象名称的情况不一致,在这种情况下混合并匹配IdID(请注意小写&#34; d& #34;。)

在大多数使用SQL Server的情况下,它实际上并不重要,您的SQL仍将运行;根据我的经验,大多数安装都不区分大小写。但保持一致通常是一件好事,并且可能会阻止未来出现问题,因此我只需修复您的代码,以便您始终使用与您的表定义中声明的列名完全相同的列名。

答案 1 :(得分:1)

如果您不关心SQL中的大小写设置,则可以通过取消选中“验证标识符的大小写”框,在“项目设置”中禁用此警告。 enter image description here