【发布时间】:2016-01-07 08:40:44
【问题描述】:
我在存储过程中使用了 SQL Server MERGE 语句,在编译存储过程时出现此错误:
对象引用 [dbo].[Student].[ID] 仅大小写不同 对象定义 [dbo].[Student].[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
我的错误是什么导致了这个错误?谢谢
编辑
获得了 2 个通过 SSMS 和 LinqPad 连接 sql compact db 的良好链接。这是链接
https://stackoverflow.com/a/16692386/728750 https://dba.stackexchange.com/questions/47534/how-do-i-view-a-microsoft-sql-server-compact-database
谢谢
【问题讨论】:
-
那么,如果你使列名的大小写一致(即在任何地方都使用“Id”而不是像
Trg.ID那样混合使用“Id”和“ID”)会发生什么? ) (另外,这是错误还是警告?大概这是来自您的客户端工具而不是服务器?想想可能是an option not to bother checking...) -
我相信这是一个 SSDT 警告(所以,一个你没有提到的工具,一个警告,而不是一个错误),对吗?
-
我正在使用来自 VS2013 IDE 的 Sql server compact db 并在那里编写 store proc。
-
感谢我将学生表中的列名从 ID 更改为 ID 的那一刻解决了问题。谢谢
-
我正在使用 VS2013 并从 IDE 打开紧凑型数据库。所以告诉我应该打开/关闭什么选项来摆脱这个区分大小写的问题。分享想法。谢谢
标签: sql-server stored-procedures sql-merge