我有一个非常简单的选择语句,如
SELECT Column-Name
FROM Object
WHERE ID = 123
动态生成Column-Name
。如果列不存在,是否有可能获得空字符串?
答案 0 :(得分:0)
这对SQL Server来说是一个巨大的攻击
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;
就个人而言,我绝不希望这是在生产代码中或在我的数据库服务器上运行。
答案 1 :(得分:0)
为什么不在发出查询之前执行desc object
或类似的事情并验证列名是否存在?
否则你最终会做有趣的事情来解决sql错误