不同模式的相同查询?
你好,
我有一个查询。它在表中查询一些数据。但是,因为有2个不同版本的数据库,所以表列发生了变化。例如:
对于版本 #1,table1 有列:id、value、name 对于版本 #2,table1 有列:id、value、title
(当它是#2时,数据库中有一个新的table2。我用来决定它是#1还是#2。)
现在,我需要编写一个查询以在一个查询中适应这两个版本。
IF OBJECT_ID('dbo.table2', 'U') IS NULL
BEGIN
-- version #1
SELECT *
FROM table1 t1 INNER JOIN table3 t3 on t1.Name = t3.Name ......
...
END
ELSE
BEGIN
-- version #2
SELECT *
FROM table1 t1 INNER JOIN table3 t3 on t1.title = t3.Name ......
...
END
当我为版本 #2 运行它时,它报告错误:t1.Name 无效的列名。
我想可能,我可以使用 EXEC 来解决这个问题。有没有更优雅的方法来做到这一点?
我尝试了 TRY CATCH,它仍然报告相同的错误。
我发现的奇怪的事情是:我有另一个查询,它确实:
1)创建一个临时表#Ldap 2)使用openquery(用于活动目录)将一些数据插入临时表#Ldap。3)然后使用上面的逻辑来判断是版本#1还是#2。
尽管它在管理工作室的编辑器中将 t1.Name 突出显示为错误,但它工作正常。它不报告错误。
这让我想知道:SQL 会先编译整个查询吗?要不然?
有人知道解决方案吗?
谢谢