我正在使用我没有文档的第三方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语法吗?
答案 0 :(得分:1)
考虑到你的测试和上面的评论,我尝试了答案:
告诉承载API的第三方,以及您的老板和/或客户,您无法使用没有文档的API,并且您必须得到API供应商的进一步支持才能执行您的工作有效。
如果文档说" ANSI SQL Compliant",那么显然不是这样,因为你的测试包括似乎暗示SQL Server的各种(经过深思熟虑的)实例,但显然不支持SQL Server本身允许的所有查询。
所以,第三方显然是过滤,重新解析或以其他方式修改您提供给它的SQL,而没有关于该层是什么以及它做什么/不做什么的进一步信息,你&#39 ;双手或多或少都是束缚,而且你只能进行猜测和反复试验。