做语法检查时要能连得上SQLServer,然后程序如下:
Private Function CheckSQL(ByVal SQLs As String) As String
On Error GoTo errHandle
conTADO.Execute ("SET PARSEONLY ON " & SQLs)
CheckSQL = "语法检查通过。"
conTADO.Execute ("SET PARSEONLY OFF")
Exit Function
errHandle:
CheckSQL = Err.Description
conTADO.Execute ("SET PARSEONLY OFF")
End Function
其中conTADO是一个已连接好的ADO的Connection对象。
关键在于
SET PARSEONLY ON 和 SET PARSEONLY OFF,
执行了SET PARSEONLY ON 后,再执行的SQL语句,不会真的执行,只是预执行一下,有错误就会返回,完了以后再执行SET PARSEONLY OFF,数据库就会恢复原态。
这一种更好一点
USE pubs
GO
PRINT 'Valid query'
GO
-- SET NOEXEC to ON.
SET NOEXEC ON
GO
-- Inner join.
SELECT a.au_lname, a.au_fname, t.title
FROM authors a
INNER JOIN titleauthor ta
ON a.au_id = ta.au_id
INNER JOIN titles t
ON ta.title_id = t.title_id
GO
-- SET NOEXEC to OFF.
SET NOEXEC OFF
GO
PRINT 'Invalid object name'
GO