从方言SQL语法中识别DBMS?

时间:2015-08-14 14:20:42

标签: sql

我正在使用我没有文档的第三方API。有一种方法可以获取SQL字符串并返回结果集。基于有效的SQL语法,我想识别SQL DBMS供应商,产品和版本。

作为有效SELECT查询的一部分按预期工作的语法:

  • CASE WHEN 1 = 1 THEN 1 ELSE 0 END
  • CAST('Catatonic' AS CHAR(3))
  • GETDATE()
  • CONVERT(VARCHAR(10), GETDATE(), 101))
  • SELECT TOP 1 valid_column FROM ValidTable

导致语法错误的语法:

  • COALESCE(NULL, 'Dog')
  • ISNULL(NULL, 'Dog')
  • CURRENT_TIMESTAMP
  • SELECT @@VERSION
  • SELECT version()
  • ;终止的语句(虽然这可能是API的事情)

要尝试的其他SQL语法吗?

1 个答案:

答案 0 :(得分:1)

考虑到你的测试和上面的评论,我尝试了答案:

告诉承载API的第三方,以及您的老板和/或客户,您无法使用没有文档的API,并且您必须得到API供应商的进一步支持才能执行您的工作有效。

如果文档说" ANSI SQL Compliant",那么显然不是这样,因为你的测试包括似乎暗示SQL Server的各种(经过深思熟虑的)实例,但显然不支持SQL Server本身允许的所有查询。

所以,第三方显然是过滤,重新解析或以其他方式修改您提供给它的SQL,而没有关于该层是什么以及它做什么/不做什么的进一步信息,你&#39 ;双手或多或少都是束缚,而且你只能进行猜测和反复试验。