當前位置:首頁 » 編程語言 » sql建立存儲時參數名不合法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql建立存儲時參數名不合法

發布時間: 2022-05-13 22:43:14

A. sql創建存儲過程

可能是你的路徑不對,比如你在aaa這個資料庫下面建立了p1存儲過程

但是你的sql查詢窗口是在master資料庫下進行的,這個時候你調用p1是錯誤的,因為master資料庫下沒有p1存儲過程。

B. 使用SQL語句創建存儲過程

使用SQL語句創建存儲的具體過程如下:

1、首先,打開企業管理器,選擇【工具】-【查詢分析器】:

C. SQL !建立存儲過程的問題!

我用的是oracle

prore getDetailByName (varchar2 in stu_name)
is
row_temp table%rowtype;
begin
select * into row_temp from table t where t.name=stu_name;
exception
when no_data_found then
begin
dbms_output.putline('警示:不存在姓名為' ||stu_name||' 的學生資料');
end;
end getDetailByName ;

D. sqlserver中創建的存儲過程,存儲過程中定義的output參數在執行時提示錯誤

--給NUMB加上默認參數就可以不用代參數執行存儲過程了,這樣:
create procere pr_output
@numb nvarchar(20)=N'' OUTPUT
AS
BEGIN
SET @NUMB='ZHANGSAN'
END
GO
EXEC pr_output
但是,你這個過程不帶參數,起什麼作用呢?所以,還是帶參數才能得到輸出結果。這樣:
DECLARE @NUMB VARCHAR(10)
EXEC pr_output @NUMB OUTPUT
SELECT @NUMB

E. 關於SQL帶參數存儲的問題

你用out輸出參數,那麼你調用這個存儲過程時,就要先定義一個變數來保存你要傳出的參數值,以你的為例:declare @outXM nchar(10) declare @outXSSL int declare @outXSRQ SmallDatetime exec proc_abc 'G00',@outXM output,@outXSSL output,@outXSRQ output
上面是我手寫的,不一定對,但方式肯定是這樣的

F. 如何在SQL存儲過程中處理錯誤

一、存儲過程中使用事務的簡單語法

在存儲過程中使用事務時非常重要的,使用數據可以保持數據的關聯完整性,在Sql server存儲過程中使用事務也很簡單,用一個例子來說明它的語法格式:

CreateProcereMyProcere
(@Param1nvarchar(10),
@param2nvarchar(10)
)
AS
Begin
SetNOCOUNTON;
SetXACT_ABORTON;
BeginTran
Deletefromtable1wherename=』abc』;
Insertintotable2values(value1,value2,value3);
CommitTran
End

說明:

1 、使用存儲過程執行事物,需要開啟XACT_ABORT參數(默認值為Off),將該參數設置為On,表示當執行事務時,如果出錯,會將transcation設置為uncommittable狀態,那麼在語句塊批處理結束後將回滾所有操作;如果該參數設置為Off,表示當執行事務時,如果出錯,出錯的語句將不會執行,其他正確的操作繼續執行。


2、當SET NOCOUNT 為 ON 時,不返回計數(計數表示受 Transact-SQL 語句影響的行數,例如在Sql server查詢分析器中執行一個delete操作後,下方窗口會提示(3)Rows Affected)。當 SET NOCOUNT 為 OFF 時,返回計數,我們應該在存儲過程的頭部加上SET NOCOUNT ON 這樣的話,在退出存儲過程的時候加上 SET NOCOUNT OFF這樣的話,以達到優化存儲過程的目的。

二、事務內設置保存點

用戶可以在事務內設置保存點或標記。保存點定義如果有條件地取消事務的一部分,事務可以返回的位置。如果將事務回滾到保存點,則必須(如果需要,使用更多的 Transact-SQL 語句和 COMMIT TRANSACTION 語句)繼續完成事務,或者必須(通過將事務回滾到其起始點)完全取消事務。若要取消整個事務,請使用 ROLLBACK TRANSACTION transaction_name 格式。這將撤消事務的所有語句和過程。如:

代碼

CreateProcereMyProcere
AS
Begin
SetNOCOUNTON;
SetXACT_ABORTON;
begintranok--開始一個事務OK
deletefromrxqzwhereqz='rx015'--刪除數據
savetranbcd--保存一個事務點命名為bcd
updateszsetname='李麗s'wherename='李麗'--修改數據

if@@error<>0--判斷修改數據有沒有出錯
begin--如果出錯
rollbacktranbcd--回滾事務到BCD的還原點
committranok--提交事務
end
else--沒有出錯
committranok--提交事務
End

說明:1、@@error判斷是否有錯誤,為0表示沒有錯誤,但是對那種重大錯誤無法捕捉,而且@@error只能前一句sql語句生效。

三、存儲過程使用try…catch捕獲錯誤

在存儲過程中可以使用try…catch語句來捕獲錯誤,如下:

CreateProcereMyProcere
(@Param1nvarchar(10),
@param2nvarchar(10)
)
AS
Begin
SetNOCOUNTON;
Begintry
Deletefromtable1wherename=』abc』;
Insertintotable2values(value1,value2,value3);
Endtry
BeginCatch
SELECTERROR_NUMBER()ASErrorNumber,
ERROR_MESSAGE()ASErrorMessage;
EndCatch
End

說明:1、捕獲錯誤的函數有很多,如下:

ERROR_NUMBER() 返回錯誤號。

ERROR_SEVERITY() 返回嚴重性。

ERROR_STATE() 返回錯誤狀態號。

ERROR_PROCEDURE() 返回出現錯誤的存儲過程或觸發器的名稱。

ERROR_LINE() 返回導致錯誤的常式中的行號。

ERROR_MESSAGE() 返回錯誤消息的完整文本。該文本可包括任何可替換參數所提供的值,如長度、對象名或時間。

2、有些錯誤,如sql語句中的表名稱輸入錯誤,這是資料庫引擎無法解析這個表名稱時,所發生的錯誤在當前的try…catch語句中無法捕獲,必須由外層調用該存儲過程的地方使用 try…catch來進行捕獲。

四、存儲過程中事務和try…catch聯合使用

在存儲過程中使用事務時,如果沒有try…catch語句,那麼當set xact_abort on時,如果有錯誤發生,在批處理語句結束後,系統會自動回滾所有的sql操作。當set xact_abort off時,如果有錯誤發生,在批處理語句結束後,系統會執行所有沒有發生錯誤的語句,發生錯誤的語句將不會被執行。

在存儲過程中使用事務時,如果存在try…catch語句塊,那麼當捕獲到錯誤時,需要在catch語句塊中手動進行Rollback操作,否則系統會給客戶端傳遞一條錯誤信息。如果在存儲過程開始處將set xact_abort on,那麼當有錯誤發生時,系統會將當前事務置為不可提交狀態,即會將xact_state()置為-1,此時只可以對事務進行Rollback操作,不可進行提交(commit)操作,那麼我們在catch語句塊中就可以根據xact_state()的值來判斷是否有事務處於不可提交狀態,如果有則可以進行rollback操作了。如果在存儲過程開始處將set xact_abort off,那麼當有錯誤發生時,系統不會講xact_state()置為-1,那麼我們在catch塊中就不可以根據該函數值來判斷是否需要進行rollback了,但是我們可以根據@@Trancount全局變數來判斷,如果在catch塊中判斷出@@Trancount數值大於0,代表還有未提交的事務,既然進入catch語句塊了,那麼還存在未提交的事務,該事務應該是需要rollback的,但是這種方法在某些情況下可能判斷的不準確。推薦的方法還是將set xact_abort on,然後在catch中判斷xact_state()的值來判斷是否需要Rollback操作。

下面我們來看看兩個例子:

一.使用Set xact_abort on

CreateprocmyProcere
As
begin
setxact_aborton;
begintry
begintran
insertintoTestStuvalues('Terry','boy',23);
insertintoTestStuvalues('Mary','girl',21);
committran
endtry
begincatch
--在此可以使用xact_state()來判斷是否有不可提交的事務,不可提交的事務
--表示在事務內部發生錯誤了。Xact_state()有三種值:-1.事務不可提交;
--1.事務可提交;0.表示沒有事務,此時commit或者rollback會報錯。
ifxact_state()=-1
rollbacktran;
endcatch
end

二.使用Set xact_abort off

CreateprocmyProcere
As
begin
setxact_abortoff;
begintry
begintran
insertintoTestStuvalues('Terry','boy',23);
insertintoTestStuvalues('Mary','girl',21);
committran
endtry
begincatch
--在此不可以使用xact_state來判斷是否有不可提交的事務
--只可以使用@@Trancount來判斷是否有還未提交的事務,未提交的事務未必
--就是不可提交的事務,所以使用@@TranCount>0後就RollBack是不準確的
if@@TranCount>0
rollbacktran;
endcatch
end


另外,對於@@Trancount需要說明的是,begin tran 語句將 @@Trancount加 1。Rollback tran將 @@Trancount遞減到 0,但 Rollback tran savepoint_name 除外,它不影響 @@Trancount。Commit tran 或 Commit work 將 @@Trancount 遞減 1。

G. sql怎樣新建存儲過程

一:創建沒有參數的存儲過程:

CREATE PROCEDURE select_all

AS

BEGIN

SELECT * from T_login1

GO

二:創建帶參數的存儲過程:

CREATE PROCEDURE select_name

@id uniqueidentifier

AS

BEGIN

SELECT * from T_login1 where PSN0001A=@id

GO

(7)sql建立存儲時參數名不合法擴展閱讀

創建存儲過程的注意事項:

1、保持事務簡短,事務越短,越不可能造成阻塞。

2、在事務中盡量避免使用循環while和游標,以及避免採用訪問大量行的語句。

3、在啟動事務前完成所有的計算和查詢等操作,避免同一事務中交錯讀取和更新。可以使用表變數預先存儲數據。即存儲過程中查詢與更新使用兩個事務實現。

4、超時會讓事務不執行回滾,超時後如果客戶端關閉連接sqlserver自動回滾事務。如果不關閉,將造成數據丟失,而其他事務將在這個未關閉的連接上執行,造成資源鎖定,甚至伺服器停止響應。

H. 在SQL Sever中建立修改表的存儲過程時的錯誤

SQL Server是微軟公司開發的一個關系資料庫管理系統,以Transact_SQL作為它的資料庫查詢和編程語言。T-SQL是結構化查詢語言SQL的一種,支持ANSI SQL-92標准。

SQL Server 採用二級安全驗證、登錄驗證及資料庫用戶帳號和角色的許可驗證。SQL Server 支持兩種身份驗證模式:Windows NT身份驗證和SQL Server 身份驗證。7.0版支持多種類型的角色,"角色"概念的引入方便了許可權的管理,也使許可權的分配更加靈活。

SQL Server為公共的管理功能提供了預定義的伺服器和資料庫角色,可以很容易為某一特定用戶授予一組選擇好的許可許可權。 SQL Server可以在不同的操作平台上運行,支持多種不同類型的網路協議如TCP/IP、IPX/SPX、Apple Talk等。SQL Server在伺服器端的軟體運行平台是Windows NT、Windows9x,在客戶端可以是Windows3.x、Windows NT、Windows9x,也可以採用其它廠商開發的系統如Unix、Apple Macintosh等。

微軟的SQL Server是一項完美的客戶/伺服器系統。SQL Server需要安裝在Windows NT的平台上,而Windows NT可以支持Intel 386,Power PC,MIPS,Alpha PC和RISC等平台,它使SQL Server具備足夠的威力和功能。

這里所有的文章所採用的資料庫應用程序都是基於SQL Server之上的,採用ODBC及標準的SQL查詢,可以非常簡單的移植到任何一個支持ODBC的資料庫之上,如:Oracle,Informix,Db2和Access,在閱讀有關ASP資料庫編程技術之前,要確認你至少熟悉一種資料庫管理系統,並可以使用標準的SQL查詢語言操作資料庫。

SQL Server提供伺服器端的軟體,這部分需要安裝在NT Server上,SQL Server的用戶端則可以安裝在許多用戶端PC系統中,Windows可以讓用戶端進行資料庫的建立,維護及存取等操作,SQL Server可以最多定義32767個資料庫,每個資料庫中,可以定義20億個表格,每個表格可以有250個欄位,每個表格的數據個數並沒有限制,每一個表格可以定義250個索引,其中有一個可以是Clustered索引。

SQL Server所使用的資料庫查詢語言稱為Transact-SQL,它是SQL Server的核心,Transact-SQL強化了原有的SQL關鍵字以進行數據的存取,儲存及處理等功能,Transact-SQL擴充了流程式控制制指定,可以使你方便的編寫功能強大的存儲過程,他們存放在伺服器端,並預先編譯過,執行速度非常塊,觸發是一種特殊的存儲過程,用來確保SQL Server資料庫引用的完整性,你可以建立插入,刪除和更新觸發以控制相關的表格中對數據列的插入,刪除和更新,你還可以使用規則(Rule),預設(default)以及限制(Constraints),來協助將新的數值套用到表格中去!

SQL SERVER的特點與評價

上手容易

話分兩頭,如果您的企業至今還未購置資料庫,其中一個主要的原因可能就是認為它不好上手,那麼,從SQLServer開始吧。畢竟,大多數的中小企業日常的數據應用是建立在Windows平台上的。由於SQLServer與Windows界面風格完全一致,且有許多"向導(Wizard)"幫助,因此易於安裝和學習,有關SQLServer的資料、培訓隨處可得,並且目前國內具有MCDBA認證的工程師不在少數。

從另一個角度來講,學習SQLServer是掌握其他平台及大型數據,如Oracle,Sybase,DB/2的基礎。因為這些大型資料庫對於設備、平台、人員知識的要求往往較高,而並不是每個人都具備這樣的條件,且有機會去接觸它們。但有了SQLServer的基礎,再去學習和使用它們就容易多了。IT行業的實踐經驗充分證明了這一點。

兼容性良好

由於今天Windows操作系統佔領著主導地的位,選擇SQLServer一定會在兼容性方面取得一些優勢。另外,SQLServer2000除了具有擴展性,可靠性以外,還具有可以迅速開發新的網際網路系統的功能。尤其是它可以直接存貯XML數據,可以將搜索結果以XML格式輸出等特點,有利於構建了異構系統的互操作性,奠定了面向互聯網的企業應用和服務的基石。這些特點在.NET戰略中發揮著重要的作用。

電子商務

在使用由MicrosoftSQLServer2000關系資料庫引擎的情況下,XML數據可在關系表中進行存儲,而查詢則能以XML格式將有關結果返回。此外,XML支持還簡化了後端系統集成,並實現了跨防火牆的無縫數據傳輸。你還可以使用HypertextTransferProtocol(超文本傳輸協議,HTTP)來訪問SQLServer2000,以實現面向SQLServer2000資料庫的安全Web連接和無須額外編程的聯機分析處理(OLAP)多維數據集。

數據倉庫

MicrosoftSQLServer2000非常明顯的改進就是增加了OLAP(聯機分析處理)功能,這可以讓很多中小企業用戶也可以使用數據倉庫的一些特性進行分析。OLAP可以通過多維存儲技術對大型、復雜數據集執行快速、高級的分析工作。數據挖掘功能能夠揭示出隱藏在大量數據中的傾向及趨勢,它允許組織或機構最大
限度的從數據中獲取價值。通過對現有數據進行有效分析,這一功能可以對未來的趨勢進行預測。

增強的在線商務

MicrosoftSQLServer2000簡化了管理、優化工作,並且增強了迅速、成功的部署在線商務應用程序所需的可靠性和伸縮性。其中,用以提高可靠性的特性包括日誌傳送、在線備份和故障切換群集。在伸縮性方面的改進包括對多達32顆CPU和64GBRAM的支持。通過自動優化和改進後的管理特性--諸如數據文件尺寸的自動管理、基於向導的資料庫拷貝、自動內存管理和簡化的故障切換群集安裝與管理,在線商務應用程序能夠被迅速部署並有效管理。

利於構築"敏捷性商務"

所謂"敏捷性商務"就是能夠打破內部和外部的商業界限,對迅速改變的環境做出快速反應。。微軟已經與關鍵的合作夥伴建立起了戰略關系,創造出了能夠與許多供應商的產品實現整合的解決方案,因而企業用戶並不需要做出"要麼完全接受,要麼全部不要"的承諾。在部署解決方案的過程中,企業用戶不一定要拆除原有的設備從頭。敏捷商務讓企業用戶能夠充分利用現有的系統,自主決定所需的硬體和軟體解決方案以及由誰來提供,伸縮自如、游刃有餘。

-------------------------------------
現在的資料庫:oracle 如日中天
sybase 情況不妙
sqlserver 馬馬忽忽

I. sql存儲過程動態Insert參數異常

檢查一下表 T_Score_1002的結構,很可能SubSemester列是varchar 類型的。必須保證觸發器和存儲過程中的@SubSemester變數的類型與表中SubSemester列的類型一致或者兼容。