我想验证一条 SQL 语句,然后返回它是不是有效? [复制]

Posted

技术标签:

【中文标题】我想验证一条 SQL 语句,然后返回它是不是有效? [复制]【英文标题】:I would like to Validate a SQL Statement and then return if its valid or not? [duplicate]我想验证一条 SQL 语句,然后返回它是否有效? [复制] 【发布时间】:2012-07-12 07:03:30 【问题描述】:

我已经创建了一个存储过程,我希望它根据 SQL 语句是否有效返回 true 或 false。

Create PROCEDURE [dbo].[CheckSQLStatement]
@SQL varchar(8000)
AS

SET NOEXEC ON
Exec @SQL 
SET NOEXEC OFF

这是我到目前为止所拥有的,当语句有效时,在 SQL Server 管理工作室中,结果是 命令成功完成。 如果我无效的语句返回错误消息,EG 'Selec' 附近的语法不正确。

首先,如果语句有效,我如何返回 false 值。

其次如何返回无效的错误信息?

我在想这样的事情:

Create PROCEDURE [dbo].[CheckSQLStatement]
@SQL varchar(8000),
@IsValid bit OUTPUT,
@text NVARCHAR(1000)OUTPUT
AS

 SET NOEXEC ON
 Exec @SQL 
 SET NOEXEC OFF

Select @Isvalid
Select @Text

但我不知道如何设置这些值?

有没有更好的方法?

任何帮助将不胜感激,在此先感谢。

【问题讨论】:

您的问题被标记为 SQLServer 2008。如果您有机会切换到 SQLServer 2012,您可以使用所谓的“Microsoft SQL Server 2012 Transact-SQL 语言服务”并实现扩展存储proc来检查你的陈述。请参阅此处了解更多信息:msdn.microsoft.com/en-us/library/… 【参考方案1】:

我也在解决这个问题,我的解决方案涉及

   BEGIN TRANSACTION
   BEGIN TRY
       ... execute sql
       ROLLBACK TRANSACTION
   END TRY
   BEGIN CATCH
      WHILE @@TRANCOUNT > 0
         ROLLBACK

      ... check ERROR_*() functions
   END CATCH

完整的 TSQL 代码在 my blog 上,并且有一个 app。

【讨论】:

这不是很有方向性,我不知道我在寻找什么?

以上是关于我想验证一条 SQL 语句,然后返回它是不是有效? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

一条sql语句实现分页查询,且能返回记录总数

您如何编写一条SQL语句来为日期值创建新列,然后在WHERE子句中查询它

如何在不运行实际查询的情况下检查 JDBC 语句的 SQL 语法?

求高手给写一条SQL语句,返回两个表中的两条数据之差

sql语句 分次(多次)获取不重复记录,请高手赐教!

oracle 用if sqlcode != 0 来判断sql语句是不是成功 sqlserver 存储过程 怎样判断一条sql语句执行成功了没有