0

我有一个非常简单的选择语句,例如

SELECT Column-Name
FROM Object
WHERE ID = 123

Column-Name动态生成的。如果列不存在,是否有可能获得空字符串?

4

2 回答 2

0

为什么不在desc object触发查询之前执行 a 或类似的操作并验证列名是否存在?否则你最终会做一些有趣的事情来解决 sql 错误

于 2013-02-20T08:40:07.987 回答
0

这对 SQL Server 来说是一个巨大的 hack

SQL 是基于批处理的:当提交给数据库引擎时,整个批处理被解析并编译一个计划。如果列或对象不存在,您将收到错误消息。

您可以测试元数据以查看它是否存在(COLUMNPROPERTY),然后使用EXEC将其SELECT放在单独的批次中

IF COLUMNPROPERTY(OBJECT_ID('Object'), 'Column-Name', 'ColumnID') IS NOT NULL
   EXEC ('SELECT Column-Name FROM Object WHERE ID = 123')
ELSE
   SELECT '' AS Column-Name;

就个人而言,我从没想过它会出现在生产代码中或在我的数据库服务器上运行。

于 2013-02-20T08:37:44.350 回答