當前位置:首頁 » 編程語言 » 如何檢查sql語句的正確性
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

如何檢查sql語句的正確性

發布時間: 2022-06-03 13:16:36

① toad如何檢測一條sql語句的正確性

點擊F9運行SQL語句,通過跟蹤輸入,輸出、出錯信息判斷語法是否正常。
中文手冊:
http://wenku..com/view/ff3786c4bb4cf7ec4afed001.html

② 如何驗證 SQL 語句的正確性

驗證sql語句的正確性:

-- 定義你想要檢驗的SQL語句
DECLARE @sql NVARCHAR(MAX)
--'正確的語句'
SET @sql = 'select * from Report_Test1'
--'錯誤的語句'
--SET @sql = 'select 1 from'
DECLARE @testsql NVARCHAR(MAX),
@result INT

SET @testsql = N'set parseonly on; ' + @sql
EXEC @result = sp_executesql @testsql
-- 如果SQL語句有誤,則@result不為0;
IF @result = 0
BEGIN
PRINT '正確的語法'
--開始執行正確的SQL語句
--exec sp_executesql @sql
END
ELSE
BEGIN
PRINT '錯誤的語法'
--不執行任何操作
END

③ 如何用T-SQL判斷SQL語法是否正確

1. SET PARSEONLY選項(類似於SSMS的Cntrl+F5)

這個選項檢查每個 Transact-SQL 語句的語法並返回任何錯誤消息,但不編譯和執行語句。

下面我們創建一個存儲過程用來檢查輸入的語句是否正確:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

create procere IsValidSQL(@sqlvarchar(max))as
begin
begin try
set @sql = 'set parseonly on;'+@sql;
exec(@sql);
end try
begin catch
return(1);
end catch;
return(0);
end;-- IsValidSQL

--這條語句語法沒有問題,返回值為0
declare @retval int;
exec @retval=IsValidSQL'select back from t ';
select @retval

--因為from語句沒有了,所以語法錯誤,返回值為1
declare @retval int;
exec @retval=IsValidSQL'select back f t ';
select @retval

因為SET PARSEONLY只是驗證語法不會生產執行計劃,可以通過下面的語句驗證:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

SET PARSEONLY ON
go
select *from [HumanResources].[Department]
go
SET PARSEONLY off

--可以確定執行計劃沒有生產
SELECT '1' AS RoundNum,usecounts,cacheobjtype,objtype,text
FROM sys.dm_exec_cached_plans
CROSS APPLYsys.dm_exec_sql_text(plan_handle)
WHERE usecounts> 0AND
text like'%HumanResources%'
AND textNOTLIKE'%Check%'
ORDER BYusecountsDESC;
GO

注意:SET PARSEONLY 的設置是在分析時設置,而不是在執行或運行時設置。

在存儲過程或觸發器中不要使用 PARSEONLY。另外這個檢查雖然可以證明語法沒有問題,但是不會檢查到對象不存在或者邏輯上的問題。

2. SET NOEXEC :編譯每個查詢,但不執行該查詢。

當 SET NOEXEC 為 ON時,SQL Server將編譯每一批處理 Transact-SQL語句但並不執行它們。當 SET NOEXEC設置為 OFF時,所有批處理將在編譯後執行。

以下示例在有效查詢、包含無效對象名稱的查詢以及包含不正確語法的查詢中使用 NOEXEC。

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

USE AdventureWorks2012;
GO
PRINT 'Valid query';
GO
-- SETNOEXEC to ON.
SET NOEXEC ON;
GO
-- Innerjoin.
SELECT e.BusinessEntityID,e.JobTitle,v.Name
FROM HumanResources.EmployeeASe
INNER JOIN Purchasing.PurchaseOrderHeaderASpoh
ON e.BusinessEntityID=poh.EmployeeID
INNER JOIN Purchasing.VendorASv
ON poh.VendorID=v.BusinessEntityID;
GO
-- SETNOEXEC to OFF.
SET NOEXEC OFF;
GO

PRINT 'Invalid object name';
GO
-- SETNOEXEC to ON.
SET NOEXEC ON;
GO
--Function name uses is a reserved keyword.
USE AdventureWorks2012;
GO
CREATE FUNCTION dbo.Values(@BusinessEntityIDint)
RETURNS TABLE
AS
RETURN (SELECTPurchaseOrderID,TotalDue
FROM dbo.PurchaseOrderHeader
WHERE VendorID = @BusinessEntityID);

-- SETNOEXEC to OFF.
SET NOEXEC OFF;
GO

PRINT 'Invalid syntax';
GO
-- SETNOEXEC to ON.
SET NOEXEC ON;
GO
--Built-in function incorrectly invoked.
SELECT *
FROM fn_helpcollations;
-- ResetSET NOEXEC to OFF.
SET NOEXEC OFF;
GO

這個選項會編譯每個查詢,比上面的選項檢查的要多。我們可以用Try Catch選項判斷,針對錯誤判斷寫出來的語句是否有問題。

④ 怎樣驗證sql語句的正確性

怎樣驗證sql語句的正確性
驗證sql語句的正確性:

-- 定義你想要檢驗的SQL語句
DECLARE @sql NVARCHAR(MAX)
--'正確的語句'
SET @sql = 'select * from Report_Test1'
--'錯誤的語句'
--SET @sql = 'select 1 from'
DECLARE @testsql NVARCHAR(MAX),
@result INT

⑤ 如何判斷SQL語句查詢的結果是不是正確的

如何判斷SQL語句查詢的結果是不是正確的?
方法一:把這個查詢的結果放到數據集中
然後用一個if判斷返回的數據集記錄數是否<=0
如果<=0的話則結果為空。
方法二:直接把SQL語句改成
SELECT
COUNT(*)
FROM
TableName
WHERE
Field=
『value』,如果返回結果=0的話即為空。

⑥ sql運行問題

sql運行問題?
資料庫運行過程中常見的故障有3類:事物故障、系統故障、介質故障。

恢復策略:
1、事物故障:
發生事務故障時,被迫中斷的事務可能已對資料庫進行丁修改,為了消除該事務對資料庫的影響,要利用日誌文件中所記載的信息,強行回滾該事務,將資料庫恢復到修改前的初始狀態。
為此,要檢查日誌文件中由這些事務所引起的發生變化的記錄,取消這些沒有完成的事務所做的一切改變,這類恢復操作稱為事務撤銷。
2、系統故障:
系統故障的恢復要完成兩方面的工作,既要撤銷所有末完成的事務,還要重做所有已提交的事務,這樣才能將資料庫真正恢復到一致的狀態。

3、介質故障:
介質故障比事務故障和系統故障發生的可能性要小,但這是最嚴重的一種故障,破壞性很大,磁碟上的物理數據和日誌文件可能被破壞,這需要裝入發生介質故障前最新的後備資料庫副本,然後利用日誌文件重做該副本後所運行的所有事務。
「數據故障恢復」和「完整性約束」、「並發控制」一樣,都是資料庫數據保護機制中的一種完整性控制。所有的系統都免不了會發生故障,有可能是硬體失靈,有可能是軟體系統崩潰,也有可能是其他外界的原因,比如斷電等等。
資料庫運行的突然中斷會使資料庫處在一個錯誤的狀態,而且故障排除後沒有辦法讓系統精確地從斷點繼續執行下去。這就要求DBMS要有一套故障後的數據恢復機構,保證資料庫能夠回復到一致的、正確地狀態去。

⑦ SQL語句正確性判斷

你是order by和where的順序用反了
where catagory='DiMing' order by etime desc limit 0,8 這樣就好了

⑧ 如何驗證SQL語句的正確性

declare @testsql nvarchar(max),
@result int
改成:
declare @testsql nvarchar(max)
declare @result int