當前位置:首頁 » 服務存儲 » 存儲過程不能包含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,是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統。