我想验证一条 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语句来为日期值创建新列,然后在WHERE子句中查询它
如何在不运行实际查询的情况下检查 JDBC 语句的 SQL 语法?
oracle 用if sqlcode != 0 来判断sql语句是不是成功 sqlserver 存储过程 怎样判断一条sql语句执行成功了没有