Sql server 处理SQL Server表中缺少的列

Sql server 处理SQL Server表中缺少的列,sql-server,Sql Server,我们有大量的数据库,都有表MyTable,但在一些数据库中有一个名为MyTable.mycl1的列,而在一些数据库中没有 我正在尝试为表构造一个SELECT,它可以针对任何数据库运行。所以我需要一个在mycl1不存在时不会出错的查询 在我看来,这应该很容易,但似乎不是 我无法更改数据库或创建视图,因此我需要在普通SQL脚本中处理此问题 声明@mycl1len INT=COL_LENGTH'MyTable','mycl1'; 如果@mycl1len为空 打印“列不存在” 其他的 打印“列存在” 这

我们有大量的数据库,都有表MyTable,但在一些数据库中有一个名为MyTable.mycl1的列,而在一些数据库中没有

我正在尝试为表构造一个SELECT,它可以针对任何数据库运行。所以我需要一个在mycl1不存在时不会出错的查询

在我看来,这应该很容易,但似乎不是

我无法更改数据库或创建视图,因此我需要在普通SQL脚本中处理此问题

声明@mycl1len INT=COL_LENGTH'MyTable','mycl1'; 如果@mycl1len为空 打印“列不存在” 其他的 打印“列存在” 这可以工作,并打印正确的文本,但当我为SELECT语句切换文本时,如下所示:

声明@mycl1len INT=COL_LENGTH'MyTable','mycl1'; 如果@mycl1len为空 打印“列不存在” 其他的 从MyTable中选择MyCL1 我收到一个错误:无效的列名“mycl1”


如何使用SQL脚本来处理列可能不存在的事实,如果不存在,则只返回其他内容,例如空字符串?

您必须在此处使用动态SQL:

如果存在,请选择1 从sys.s 在s.schema\u id=t.schema\u id上连接sys.t表 连接t.object\u id=c.object\u id上的sys.c列 其中s.[name]=N'dbo' 和t.[name]=N'MyTable' 和c.[name]=N'mycl1' EXEC sys.sp_executesql N'SELECT mycl1 FROM dbo.MyTable;'; 其他的 打印“列不存在”;
类似的内容将根据c2在表中是否可用在实际列和计算列之间切换:从中选择t.*选择“缺失”,因为c2 v交叉应用从t中选择c1、c2