2012-07-12 58 views
0

我做了一個存儲過程,我希望它返回true的真假取決於如果SQL語句是有效的。我想驗證一個SQL語句,然後返回它是否有效?

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

SET NOEXEC ON 
Exec @SQL 
SET NOEXEC OFF 

這個我什麼我到目前爲止,當語句是有效的,在SQL Server Management Studio中,結果是指令(S)成功完成。如果我無效的聲明返回錯誤消息,EG 'Selec'附近的語法不正確。

首先,如果語句有效,我該如何返回值爲真的錯誤。

其次我該如何返回無效的錯誤信息?

我的想法是這樣的:

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 

但我不知道如何設置茨艾倫值?

有沒有更好的方法?

任何幫助將不勝感激,提前致謝。

+0

您的問題已標記爲SQLServer 2008.如果有機會,您可以切換到SQLServer 2012,您可以使用所謂的「Microsoft SQL Server 2012 Transact-SQL語言服務」並實施擴展存儲過程來檢查您的語句。在這裏看到更多的信息:http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.sqlparser.parser.aspx – 2012-07-12 09:04:05

回答

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

+0

這不是很有方向性,我不知道我在找什麼對於? – Pomster 2012-07-12 08:55:51

相關問題