如果列不存在,则禁止选择列

时间:2014-08-30 16:42:27

标签: sql sql-server sql-server-2008 tsql

我在2个不同的数据库中有2个相同格式的表。

数据库1

_________  _____________________   _______________
Code(int)   Description(varchar)    Class(varchar)
_________  _____________________   ________________

的Database2

_________  _____________________   ___________
Code(int)   Description(varchar)    Type(int)
_________  _____________________   ___________

我希望为我的C#应用​​程序编写一个通用查询,该查询从两个数据库中检索值。我写了以下查询

DECLARE @DB = 'Database1'

IF(@DB = 'Database1')
BEGIN

SELECT 
    ID,[Description],Class
FROM MyTable

END

ELSE
BEGIN

SELECT 
    ID,[Description],Type
FROM MyTable

END

但是,当分别为ClassType运行时,上述查询会对列Database2Database1引发错误。

PS:我正确地与DB建立连接,并相应地设置参数@DB。逻辑是运行此查询两次,一次为Database1运行,并使用MyTable列获取相应的Class,并Database2第二次获取相应的MyTable使用Type列。

我希望知道以任何方式实现我想做的事情。 在此先感谢!!

2 个答案:

答案 0 :(得分:1)

这不会起作用,因为:

  

解析并编译整个请求(批处理)。如果发生错误   在此阶段,请求以编译错误终止

source

您可以尝试动态sql:

IF @DB = 'Database1'
BEGIN
    execute sp_sqlexec 
    'SELECT ID,[Description],[Class]
    FROM MyTable;';
END
ELSE
BEGIN
    execute sp_sqlexec 
    'SELECT ID,[Description],[Type]
    FROM MyTable;';
END

答案 1 :(得分:0)

用例陈述

SELECT 
        ID,[Description],CASE WHEN @DB = 'Database1' THEN Class ELSE Type END
    FROM table