当前位置:首页 » 服务存储 » 存储过程不能包含set语句
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

存储过程不能包含set语句

发布时间: 2022-07-25 19:36:35

‘壹’ sql存储过程前面有语句setANSI_NULLSONsetQUOTED_IDENTIFIERONgo,这是什么意思

这些是SQL-92设置语句,使SQLServer2000/2005遵从SQL-92规则。
当SETQUOTED_IDENTIFIER为ON时,标识符可以由双引号分隔,而文字必须由单引号分隔。当SETQUOTED_IDENTIFIER为OFF时,标识符不可加引号,且必须符合所有Transact-SQL标识符规则。
SQL-92标准要求在对空值进行等于(=)或不等于(<>)比较时取值为FALSE。当SETANSI_NULLS为ON时,即使column_name中包含空值,使用WHEREcolumn_name=NULL的SELECT语句仍返回零行。即使column_name中包含非空值,使用WHEREcolumn_name<>NULL的SELECT语句仍会返回零行。
当SETANSI_NULLS为OFF时,等于(=)和不等于(<>)比较运算符不遵从SQL-92标准。使用WHEREcolumn_name=NULL的SELECT语句返回column_name中包含空值的行。使用WHEREcolumn_name<>NULL的SELECT语句返回列中包含非空值的行。此外,使用WHEREcolumn_name<>XYZ_value的SELECT语句返回所有不为XYZ_value也不为NULL的行

‘贰’ 如何在存储过程中执行set命令

1.EXEC使用
EXEC命令两种用种执行存储程另种执行态批处理所讲都第二种用
面先使用EXEC演示例,代码1
DECLARE @TableName VARCHAR(50),@Sql NVARCHAR (MAX),@OrderID INT;
SET @TableName = 'Orders';
SET @OrderID = 10251;
SET @sql =
'SELECT * FROM '+QUOTENAME(@TableName) +'WHERE OrderID = '+
CAST(@OrderID AS VARCHAR(10))+' ORDER BY ORDERID DESC'
EXEC(@sql);

sp_executesql命令SQL Server引入比EXEC命令晚些主要重用执行计划提供更支持
EXEC作鲜明比,我看看用代码1代码EXEC换sp_executesql,看看否我所期望结
DECLARE @TableName VARCHAR(50),@sql NVARCHAR(MAX),@OrderID INT ,@sql2 NVARCHAR(MAX);
SET @TableName = 'Orders ';
SET @OrderID = 10251;
SET @sql = 'SELECT * FROM '+QUOTENAME(@TableName) + ' WHERE OrderID = '+CAST(@OrderID AS VARCHAR(50)) + ' ORDER BY ORDERID DESC'
EXEC sp_executesql @sql

‘叁’ 在sql2005数据库执行存储过程出现:关键字 'SET' 附近有语法错误。 怎么处理呀代码如下

换成

CREATE proc [dbo].[GetDataSet]
@TableList Varchar(1024)='*',--搜索表的字段,比如:’id,datatime,job‘,用逗号隔开
@TableName Varchar(100), --搜索的表名
@SelectWhere Varchar(1024)='',--搜索条件,这里不用写where,比如:job=’teacher‘and class='2'
@SelectOrderId Varchar(50),--表主键字段名。比如:id
@SelectOrder Varchar(200)='', --排序,可以使用多字段排序但主键字段必需在最前面.也可以不写,比如:order by class asc
@intPageNo int=1, --页号
@intPageSize int=10 ,--每页显示数
@RecordCount int OUTPUT --总记录数(存储过程输出参数)
as
declare @TmpSelect NVarchar(4000)
declare @Tmp NVarchar(4000)
declare @pagecount int
set nocount on--关闭计数
set @RecordCount=0
set @TmpSelect = 'select @RecordCount=count(*) from '+@TableName+' where '+@SelectWhere
execute sp_executesql
@TmpSelect, --执行上面的sql语句
N'@RecordCount int OUTPUT' , --执行输出数据的sql语句,output出总记录数
@RecordCount OUTPUT
if (@RecordCount = 0) --如果没有贴子,则返回零
return 0
set @pagecount = @RecordCount/@intPageSize
if(@RecordCount%@intPageSize>0)
set @pagecount=@pagecount+1
if(@pagecount<=0)
set @pagecount=1
if(@intPageNo>@pagecount)
set @intPageNo=@pagecount
/*判断页数是否正确*/
--if (@intPageNo - 1) * @intPageSize > @RecordCount --页号大于总页数,返回错误
--set @intPageNo=@pagecount
set nocount off--打开计数
if @SelectWhere != ''
begin
set @TmpSelect = 'select top '+str(@intPageSize)+' '+@TableList+' from '+@TableName+' where '+@SelectOrderId+' not in(select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+@TableName+' where '+@SelectWhere +' '+@SelectOrder+') and '+@SelectWhere +' '+@SelectOrder
end
else
begin
set @TmpSelect = 'select top '+str(@intPageSize)+' '+@TableList+' from '+@TableName+' where '+@SelectOrderId+' not in(select top '+str((@intPageNo-1)*@intPageSize)+' '+@SelectOrderId+' from '+@TableName+''+@SelectOrder+') '+@SelectOrder
end
execute sp_executesql @TmpSelect
return(@@rowcount)
GO

‘肆’ 一个存储过程中 可以一起用sql 中 set 和select 吗

select 一般要使用into,至于你后面的问题,没太看懂,你的声明 是用declare声明的吧,那这样就和存储过程的形参没有太大关系,你执行存储过程 如果存储过程有形参,那你肯定也要把形参带上了

‘伍’ 存储过程里面set赋值怎么没有起到作用

用select...into语句

下面是mysql 5.0的帮助文档的:
这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。

SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,用户变量名在MySQL 5.1中是对大小写不敏感的。请参阅9.3节,“用户变量”。

重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。例如,在下面的语句中,xname 被解释为到xname variable 的参考而不是到xname column的:

CREATE PROCEDURE sp1 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob';
DECLARE newname VARCHAR(5);
DECLARE xid INT;

SELECT xname,id INTO newname,xid
FROM table1 WHERE xname = xname;
SELECT newname;
END;
当这个程序被调用的时候,无论table.xname列的值是什么,变量newname将返回值‘bob’。

‘陆’ SQL存储过程中 错误156:在关键字‘set’附近有语法错误

WHERE 部分括号混乱,不对称啊,弄不清楚就每个条件一行,一目了然。

‘柒’ 存储过程中的 SET NOCOUNT ON 什么意思


SET
NOCOUNT

ON
时,不返回计数(表示受
Transact-SQL
语句影响的行数)。当
SET
NOCOUNT

OFF
时,返回计数。
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显着提高性能。

‘捌’ sql中的存储过程set是什么意思

SQL 语句里Update...........set连用是用于修改表中的数据,set是将新值更新到指定列中。

  1. Update 语句用于修改表中的数据。

  2. 语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;

    例如下句是更新某一行中的一个列,为 lastname 是 "Wilson" 的人添加 firstname:

    UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'

  3. WHERE子句设置查询条件,过滤掉不需要的数据行。

  4. 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。