十三、自定義類型

用戶定義數據類型

通俗定義:用戶自己設計並實現的數據類型就稱爲用戶自定義數據類型,即使這些數據類型基於系統數
據類型。也可以理解爲基礎類型的一個延伸。
用戶定義數據類型三要素:
1. 數據類型的名稱
2. 所基於的系統數據類型
3. 數據類型的可空性(是否可以爲空)
USE[Advanced14]

GO
CREATE TYPE [dbo].[Age] FROM [int] NOT NULL 
用戶定義表類型
定義:類型類似於一個表結構,使用基礎類型包含了字段,可以用來作爲存儲過程的參數傳遞。
USE[Advanced14]

GO

CREATE TYPE [dbo].[PageParameter] AS TABLE(
[TableName] [varchar](50)NOT NULL,
[ReFieldsStr] [varchar](200)NOT NULL,
[OrderString] [varchar](200)NOT NULL,
[WhereString] [varchar](500)NOT NULL,
[PageSize] [int]NOT NULL,
[PageIndex][int]NOT NULL,
[TotalRecord][int]NOT NULL
)
---調用存儲過程
DECLARE @PageParame PageParameter
INSERT INTO @PageParame VALUES ('Company','*','Id','',10,2,0) SELECT * FROM @PageParame
使用用戶自定義表類型存儲過程
USE[Advanced14]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON 
GO


CREATE PROCEDURE [dbo].[SP_CustomPagerForTableType]
@PageParameter PageParameter READONLY,
@TotalRecord INT OUTPUT         --返回總記錄數
AS
BEGIN

--select*from@PageParameter   --處理開始點和結束點
DECLARE @TableName VARCHAR(50);     --表名
  DECLARE @ReFieldsStr VARCHAR(200)='*'--字段名(全部字段爲*)
  DECLARE @OrderString VARCHAR(200);    --排序字段(必須!支持多字段不用加orderby)  
  DECLARE @WhereString VARCHAR(500)=N'';--條件語句(不用加where)
  DECLARE @PageSize INT;          --每頁多少條記錄
  DECLARE @PageIndex INT=1;       --指定當前爲第幾頁
  --DECLARE@TotalRecordINTOUTPUT;     --返回總記錄數

select top 1
@TableName=[TableName],
@ReFieldsStr=[ReFieldsStr],@OrderString=[OrderString],@WhereString=[WhereString],@PageSize=[PageSize],
@PageIndex=[PageIndex]
from @PageParameter
 DECLARE @StartRecord INT;
 DECLARE @EndRecord INT;
 DECLARE @TotalCountSql NVARCHAR(500); DECLARE @SqlString NVARCHAR(2000); 
 SET @StartRecord=(@PageIndex-1)*@PageSize+1--起始記錄
 SET @EndRecord=@StartRecord+@PageSize-1--結尾記錄
 SET @TotalCountSql=N'select@TotalRecord=count(*)from'+@TableName;--總記錄數語句 
 SET @SqlString=N'(selectrow_number()over(orderby'+@OrderString+') as
rowId,'+@ReFieldsStr+'from'+@TableName;--查詢語句

 IF(@WhereString!=''or @WhereString!=null)
   BEGIN
     SET @TotalCountSql=@TotalCountSql+'where'+@WhereString;
     SET @SqlString=@SqlString+'where'+@WhereString;         END

 --第一次執行得到
 EXEC sp_executesql @totalCountSql,N'@TotalRecordintout',@TotalRecord OUTPUT;--返回總記錄數 ----執行主語句
 SET @SqlString='select*from'+@SqlString+')astwhererowIdbetween'+
ltrim(str(@StartRecord))+'and'+ltrim(str(@EndRecord));

Exec(@SqlString)  END 
GO
-----調用存儲過程
DECLARE @PageParame PageParameter
DECLARE @TotalRecord INT
INSERT INTO @PageParame VALUES('Company','*','Id','',10,2,0)
SELECT * FROM @PageParame
EXEC [dbo].[SP_CustomPagerForTableType] @PageParame,@TotalRecord

 

 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章