我试图找到一种方法来查询 SQL 数据库表中的列。这似乎是一个合理的功能,但我发现它很大程度上依赖于实现。例如:
SQLite:
PRAGMA table_info(<table name>)
SQL服务器:
SELECT name FROM sys.columns WHERE object_id=OBJECT_ID('table name')
MySQL:
SHOW COLUMNS FROM database_Name.table_name
然后我发现有一个 ANSI 标准查询可以执行此操作:
select column_name from INFORMATION_SCHEMA.COLUMNS where table_name = 'table name'
但并非每个 RDBMS(包括 SQLite)都实现
INFORMATION_SCHEMA
,因此它似乎不是一个可靠的选择。
为什么没有一个我可以保证的强制标准 SQL 语句能够以与我可以保证
SELECT * FROM <table name>
适用于任何 SQL 数据库的相同方式返回元数据,例如表中的列?
你问了一个好问题,但
standard
就是这样。如果公司实施了它,那么你就可以一致地依赖它,如果他们没有实施,那么你就不能。
类似于
nbk
的评论。解决方法是您可以创建一个包装器来区分不同数据库的不同命令。