Mou*_*Mou 5 sql-server stored-procedures sql-merge
我在存储过程中使用了 SQL ServerMERGE语句,在编译存储过程时出现此错误:
对象引用 [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)
)
Run Code Online (Sandbox Code Playgroud)
我的存储过程是:
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
Run Code Online (Sandbox Code Playgroud)
我的什么错误导致了这个错误?谢谢
获得了 2 个通过 SSMS 和 LinqPad 连接 sql 紧凑数据库的良好链接。链接在这里
/sf/answers/1168467051/ https://dba.stackexchange.com/questions/47534/how-do-i-view-a-microsoft-sql-server-compact-database
谢谢
这本身并不是 SQL Server 错误,只是来自开发工具的警告。它告诉您,您的对象名称的大小写不一致,在本例中是混合和匹配Id以及ID(注意小写的“d”)。
在大多数情况下,对于 SQL Server,这实际上并不重要,您的 SQL 仍然会运行;根据我的经验,大多数安装都是不区分大小写的。但保持一致通常是一件好事,并且可能会防止将来出现问题,因此我只需修复您的代码,以便您始终如一地使用表定义中声明的列名称。