当前位置:首页 » 编程语言 » 如何检查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