Sql server 逻辑语句内部的验证

Sql server 逻辑语句内部的验证,sql-server,tsql,Sql Server,Tsql,我在T-SQL数据库的更新脚本中进行了以下逻辑测试: IF ((COL_LENGTH('dbo.Trackers','DeviceId') IS NOT NULL) AND (COL_LENGTH('dbo.Devices','UserId') IS NOT NULL)) UPDATE [dbo].[Devices] SET [UserId] = (SELECT TOP 1 t.UserId FROM Trackers t WHERE t.DeviceId = [dbo].[Devi

我在T-SQL数据库的更新脚本中进行了以下逻辑测试:

IF ((COL_LENGTH('dbo.Trackers','DeviceId') IS NOT NULL) AND (COL_LENGTH('dbo.Devices','UserId') IS NOT NULL))
   UPDATE [dbo].[Devices]
   SET [UserId] = (SELECT TOP 1 t.UserId FROM Trackers t WHERE t.DeviceId = [dbo].[Devices].DeviceId);
GO
…这给了我一个错误:

列名“DeviceId”无效

好的,column Trackers.DeviceId确实不存在了,但是我语句的第一部分应该阻止这个验证,还是我错了


提前谢谢

我认为这是因为查询是编译的,在此过程中服务器会检查语法。它向您发送此错误,因为列不存在。在此过程中无法映射此列。

我认为您是对的。也许我需要在IF中运行一个“sp_executesql”。