SQLSERVER2000技術規格
--------------系統技術規格---------------
--每個伺服器最多可以允許16個SQLSERVER實例
--每個實例可擁有 2147483467 個鎖
--------------資料庫技術規格--------------
--SQLSERVER的資料庫大小1048516TB
--每個資料庫可擁有的文件組數32767
--每個資料庫可擁有的文件組數256
--文件大小(數據文件)32TB ---
--文件大小(日誌文件)32TB ---
--資料庫中的對象數2 147 483 647
--標識符的長度128
--------------表技術規格-------------------
--每個資料庫中可擁有的表數受限於資料庫中的對象數
--每個表可擁有的行數受限於可用的存儲容量
--每個表的主鍵約束數1
--每個表的外鍵約束數253
--每個表的引用數253
--每個表的觸發器數受限於資料庫中的對象數
--每個表的簇索引數1
--每個表的非簇索引數249
--每個表的唯一約束249非簇的,1成簇的
--------------列技術規格-------------------
--每個索引可包含的列數16
--每個主鍵可包含的列數16
--每個外鍵可包含的列數16
--每個表的列數1024
--索引鍵的大小900位元組
--每個character或binary列的位元組數8000
--每個text,ntext或image列的位元組數2GB-2
--每行的位元組數8060
--每個索引的位元組數900
--每個主鍵的位元組數900
--每個外鍵的位元組數900
--------------SQL技術規格-------------------
--批處理大小65536乘以網路包大小
--每個SELECT語句可處理的表數256
--存儲過程源文件的位元組數小於批處理大小或250MB
--每個存儲過程的參數數目1024
--嵌套的子查詢數32
--嵌套的觸發器層數32
--每個SELECT語句可處理的列數4096
--每個INSERT語句可處理的列數1024
② 請教存儲過程中的字元串長度的限制問題
vb限制長度
你可以TextBox的maxlength屬性為11,在其屬性窗口中設置或在代碼中Text1.maxlength=11
不過這樣輸入11個字元後就不能再輸入了,不能出現提示。
若非想提示那就在編寫TextBox的text_chenged事件
if Text1.length >= 11 then
MsgBox "請正確輸入手機號碼!"
end if
③ SQL SERVER裡面如何在存儲過程裡面獲取另一個存儲過程所返回的表的數據
首先需要知道「另一個存儲過程」的結果集的所有列的類型。
假設「另一個存儲過程」的名字是sp1,沒有參數,返回的結果集共3列,全部為int型,那麼「存儲過程」里添加一個與結果集列數相同的臨時表或表變數用於接收「另一個存儲過程」的結果集
如下
CREATE PROCEDURE sp2
AS
DECLARE @t table(a int,b int,c int)
INSERT INTO @t(a,b,c)
EXEC sp1
SELECT * FROM @t
使用SQLSERVER存儲過程可以很大的提高程序運行速度,簡化編程維護難度,現已得到廣泛應用。
創建存儲過程
和數據表一樣,在使用之前需要創建存儲過程,它的簡明語法是:
引用:
Create PROC 存儲過程名稱
[參數列表(多個以「,」分隔)]
AS
SQL 語句
例:
引用:
Create PROC upGetUserName
@intUserId INT,
@ostrUserName NVARCHAR(20) OUTPUT -- 要輸出的參數
AS
BEGIN
-- 將uName的值賦給 @ostrUserName 變數,即要輸出的參數
Select @ostrUserName=uName FROM uUser Where uId=@intUserId
END
其中 Create PROC 語句(完整語句為Create PROCEDURE)的意思就是告訴SQL SERVER,現在需要建立一個存儲過程,upGetUserName 就是存儲過程名稱,@intUserId 和 @ostrUserName 分別是該存儲過程的兩個參數,注意,在SQL SERVER中,所有用戶定義的變數都以「@」開頭,OUTPUT關鍵字表示這個參數是用來輸出的,AS之後就是存儲過程內容了。只要將以上代碼在「查詢分析器」里執行一次,SQL SERVER就會在當前資料庫中創建一個名為「upGetUserName」的存儲過程。你可以打開「企業管理器」,選擇當前操作的資料庫,然後在左邊的樹型列表中選擇「存儲過程」,此時就可以在右邊的列表中看到你剛剛創建的存儲過程了(如果沒有,刷新一下即可)。
二、存儲過程的調用
之前已經創建了一個名為「upGetUserName」的存儲過程,從字面理解該存儲過程的功能是用來取得某一個用戶的名稱。存儲過程建立好了,接下來就是要在應用程序里調用了,下面看一下在ASP程序里的調用。
引用:
Dim adoComm
』// 創建一個對象,我們用來調用存儲過程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
』// 設置連接,設 adoConn 為已經連接的 ADODB.Connection 對象
.ActiveConnection = adoConn
』// 類型為存儲過程,adCmdStoredProc = 4
.CommandType = 4
』// 存儲過程名稱
.CommandText = "upGetUserName"
』// 設置用戶編號
.Parameters.Item("@intUserId").Value = 1
』// 執行存儲過程
.Execute
』// 取得從存儲過程返回的用戶名稱
Response.Write "用戶名:" & .Parameters.Item("@ostrUserName").Value
End With
』// 釋放對象
Set adoComm = Nothing
通過以上兩步,已經可以創建和使用簡單的存儲過程了。下面來看一個稍微復雜點的存儲過程,以進一步了解存儲過程的應用。
三、存儲過程的實際應用
用戶登錄在ASP項目中經常會使用到,但使用存儲過程來做驗證可能不多,那麼做例子,寫一個簡單的用戶登錄驗證的存儲過程。
引用:
Create PROC upUserLogin
@strLoginName NVARCHAR(20),
@strLoginPwd NVARCHAR(20),
@blnReturn BIT OUTPUT
AS
-- 定義一個臨時用來保存密碼的變數
DECLARE @strPwd NVARCHAR(20)
BEGIN
-- 從表中查詢當前用戶的密碼,賦值給 @strPwd 變數,下面要對他進行比較
Select @strPwd=uLoginPwd FROM uUser Where uLoginName=@strLoginName
IF @strLoginPwd = @strPwd
BEGIN
SET @blnReturn = 1
-- 更新用戶最後登錄時間
Update uUser SET uLastLogin=GETDATE() Where uLoginName=@strLoginName
END
ELSE
SET @blnReturn = 0
END
用戶登錄的存儲過程建立好了。注意,在一個區域內如果有多條語句時,必需使用BEGIN...END關鍵字。
引用:
Dim adoComm
』// 創建一個對象,我們用來調用存儲過程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
』// 設置連接,設 adoConn 為已經連接的 ADODB.Connection 對象
.ActiveConnection = adoConn
』// 類型為存儲過程,adCmdStoredProc = 4
.CommandType = 4
』// 存儲過程名稱
.CommandText = "upUserLogin"
』// 設置登錄名稱
.Parameters.Item("@strLoginName").Value = "***"
』// 設置登錄密碼
.Parameters.Item("@strLoginPwd").Value = "123456"
』// 執行存儲過程
.Execute
』// 判斷是否登錄成功
If .Parameters.Item("@blnReturn").Value = 1 Then
Response.Write "恭喜你,登錄成功!"
Else
Response.Write "不是吧,好像錯了哦。。。"
End If
End With
』// 釋放對象
Set adoComm = Nothing
通過以上的步驟,簡單用戶登錄驗證過程也做完了,現在只要把它整合到程序中就可以實現簡單的用戶登錄驗證了,關於其他細節就由你自己來處理了。
上面介紹的兩個存儲過程都是只返回一個值的,下面我們來看一個返回一個記錄集的存儲過程。
引用:
Create PROC upGetUserInfos
@intUserGroup INT
AS
BEGIN
-- 從資料庫中抽取符合條件的數據
Select uName,uGroup,uLastLogin FROM uUser Where uGroup=@intUserGroup
-- 插入一列合計
UNION
Select 』合計人數:』,COUNT(uGroup),NULL FROM uUser Where uGroup=@intUserGroup
END
現在我們來看一下ASP程序的調用。
引用:
Dim adoComm
Dim adoRt
』// 創建一個對象,我們用來調用存儲過程
Set adoComm = CreateObject("ADODB.Command")
Set adoRs = CreateObject("ADODB.Recordset")
With adoComm
』// 設置連接,設 adoConn 為已經連接的 ADODB.Connection 對象
.ActiveConnection = adoConn
』// 類型為存儲過程,adCmdStoredProc = 4
.CommandType = 4
』// 存儲過程名稱
.CommandText = "upGetUserInfos"
』// 設置用戶組
.Parameters.Item("@intUserGroup").Value = 1
』// 執行存儲過程,和以上幾個例子不同,這里使用RecordSet的Open方法
adoRs.Open adoComm
』// 顯示第一個值
Response.write adoRs.Fields(0).Value
End With
』// 釋放對象
Set adoRs = Nothing
Set adoComm = Nothing
④ SQL Server 2012 Express 資料庫的大小限制最大為多大
SQL實例的資料庫個數32,767,資料庫中的對象個數 2,147,483,6474, 資料庫的數據表個數受資料庫中的對象個數限制。查看方法如下:
1、首先登錄sql server managment。
⑤ sql Server 存儲過程參數最大長度限制是多少
sqlserver中varchar最大長度是8000,但是可以使用varchar(max),可以達到2G。
關於解釋:
有var前綴的,表示是實際存儲空間是變長的,varchar,nvarchar
所謂定長就是長度固定的,當輸入的數據長度沒有達到指定的長度時將自動以英文空格在其後面填充,使長度達到相應的長度;而變長字元數據則不會以空格填充,比較例外的是,text存儲的也是可變長。
⑥ sqlserver存儲過程 限制欄位長度
inseterd 插入觸發器里判斷下數據長度len()是否為11,不為11不做插入操作
⑦ mysql 存儲過程中 用臨時表 性能消耗大嗎
我們使用兩個會話,一個會話 run,用於運行主 SQL;另一個會話 ps,用於進行 performance_schema 的觀察:
主會話線程號為 29,
可以看到寫入的線程是 page_clean_thread,是一個刷臟操作,這樣就能理解數據為什麼是慢慢寫入的。
也可以看到每個 IO 操作的大小是 16K,也就是刷數據頁的操作。
結論:
我們可以看到,
1. MySQL 會基本遵守 max_heap_table_size 的設定,在內存不夠用時,直接將表轉到磁碟上存儲。
2. 由於引擎不同(內存中表引擎為 heap,磁碟中表引擎則跟隨 internal_tmp_disk_storage_engine 的配置),本次實驗寫磁碟的數據量和實驗 05中使用內存的數據量不同。
3. 如果臨時表要使用磁碟,表引擎配置為 InnoDB,那麼即使臨時表在一個時間很短的 SQL 中使用,且使用後即釋放,釋放後也會刷臟頁到磁碟中,消耗部分 IO。
⑧ oracle存儲過程的輸入或輸出參數的長度有沒有限制
你指的是參數輸入及結果輸出吧
跟oracle版本、參數、結果類型有關。
⑨ 存儲過程返回表
通過調用存儲過程不但能返回值,還能返回一張表,下面的代碼中實現了創建一個臨時表,並返回這個表(支持多個)的用法。希望對大家有幫助,
Examda提示: 這里還涉及到一個臨時表的創建,什麼是sql server真正的臨時表,並發不沖突的臨時表,要讓系統建立在tempdb中才是,sql server會自動管理這些臨時表
c#代碼如下
DataSet ds = new DataSet();
System.Data.OleDb.OleDbCommand cmd = m_TdlyDataAccess.DBConnection.CreateCommand();
cmd.CommandText = "prcTest";
cmd.CommandType = CommandType.StoredProcere;
System.Data.OleDb.OleDbDataAdapter dap = new System.Data.OleDb.OleDbDataAdapter(cmd);
dap.Fill(ds);
存儲過程如下
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[prcTest]
AS
begin
CREATE TABLE #t(x INT PRIMARY KEY,y int default 0,z int default 0)
INSERT INTO #t VALUES (99,0,0)
INSERT INTO #t VALUES (239,0,0)
INSERT INTO #t VALUES (939,0,0)
select * from #t
drop table #t
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
⑩ 在sql server 2005一個存儲過程不能超過多少個字元
存儲過程本身沒有長度限制但是裡面定義的字元串變數每個最大不能超過4000