我收到错误的SQL消息 4104。

17 浏览
0 Comments

我收到错误的SQL消息 4104。

使用以下代码:\n

UPDATE MyBase.dbo.Inventory
SET Inventory.BarCode= Table1.Barcode
FROM Market.dbo.Table1, MyBase.dbo.Inventory
WHERE Table1.Barcode=Inventory.BarCode 

\n我收到了错误信息:Msg 4104, Level 16, State 1, Line 1\n无法绑定多部分标识符\"Table1.Barcode\"。

0
0 Comments

在使用上述代码进行更新操作时,可能会出现错误SQL Msg 4104。这个错误的原因是在UPDATE语句中没有明确指定表的别名。解决这个问题的方法是使用明确的连接操作,并给表分配适当的别名。下面是修改后的代码:

UPDATE I
SET I.BarCode = T.Barcode 
FROM MyBase.dbo.Inventory AS I
INNER JOIN Market.dbo.Table1 AS T
    ON I.BarCode = T.Barcode;

通过给表指定别名,我们可以更清楚地指示出UPDATE操作应该应用于哪个表。这样做可以避免SQL Msg 4104错误的发生,确保更新操作能够正确执行。

0
0 Comments

错误消息SQL Msg 4104的出现原因是由于数据库之间的排序规则冲突(collation conflict),解决方法是在查询中使用适当的排序规则或者在查询中指定数据库名称。

在给出的代码中,更新语句中的连接操作使用了不同的排序规则(SQL_Latin1_General_CP1253_CI_AS和Greek_CI_AS),导致了排序规则冲突。为了解决这个问题,可以在查询中使用相同的排序规则(collate SQL_Latin1_General_CP1253_CI_AS),如下所示:

UPDATE t2 
SET t2.BarCode= t1.Barcode 
FROM Market.dbo.Table1 t1
join
 MyBase.dbo.Inventory t2 on t1.Barcode collate SQL_Latin1_General_CP1253_CI_AS=t2.BarCode collate SQL_Latin1_General_CP1253_CI_AS

另外,为了使查询更易读,建议使用表的别名,这样可以提高代码的可读性。

如果想了解更多关于排序规则冲突的信息,请参考以下链接:Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation

如果想更新另一个表并检查条形码,可以使用下面的更新语句:

UPDATE Customers  
SET Customer.Name = Table1.Name  
FROM Market.dbo.Table1  
join MyBase.dbo.Customers  
where  Table1.Barcode= inventory.BarCode collate SQL_Latin1_General_CP1253_CI_AS

0