首页 > 其他分享 >十三、自定义类型

十三、自定义类型

时间:2023-11-14 10:13:11浏览次数:31  
标签:SET 自定义 WhereString 十三 -- SqlString 类型 NULL DECLARE

用户定义数据类型

通俗定义:用户自己设计并实现的数据类型就称为用户自定义数据类型,即使这些数据类型基于系统数 据类型。也可以理解为基础类型的一个延伸。 用户定义数据类型三要素: 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

 

   

标签:SET,自定义,WhereString,十三,--,SqlString,类型,NULL,DECLARE
From: https://www.cnblogs.com/duyao/p/17830992.html

相关文章

  • 十一月十三日
    两个个问题我要记录之前登录的账号 因为要求学生教师只可以查看修改自己的个人信息所以必须记录之前的信息并且传送到其他的jsp文件中选课要实现一个标识符记录学生选的什么课根据这个标识去浏览 我当时一直在做选课系统没有做修改个人信息最后十分钟才做的......
  • oracle数据库 时间 TIMESTAMP(6)这是什么类型啊 怎么也插不进数据 ,是时间戳类型,参数6
    oracle数据库时间TIMESTAMP(6)这是什么类型啊怎么也插不进数据是时间戳类型,参数6指的是表示秒的数字的小数点右边可以存储6位数字是时间戳类型,参数6指的是表示秒的数字的小数点右边可以存储6位数字,最多9位。解决方法如下:1、时间戳的概念:它是一种时间表示方式,定义为从格林威......
  • timestamp(6)详解 在MySQL中,timestamp是一种时间戳类型。timestamp(6)是timestamp类型
    timestamp(6)详解在MySQL中,timestamp是一种时间戳类型。timestamp(6)是timestamp类型的一个子类型,表示精确到秒后6位小数的时间戳。它占用8个字节存储空间一、什么是timestamp(6)在MySQL中,timestamp是一种时间戳类型。timestamp(6)是timestamp类型的一个子类型,表示精确到秒后6......
  • 常见光模块的封装类型有哪些?
    光模块的封装,保障了光通信的稳定和可靠性。本文介绍几种常见的光模块的封装类型。1×9封装–焊接型光模块,一般速度不高于千兆,多采用SC接口。SFP封装:SFP(Smallform-factorpluggable)意思是小型可拔插式。就是能够支持千兆以太网、SONET、光纤通道和其他通信标准,插入到交换机SFP端口......
  • java基础学习:强制类型转换
    1.2.   代码:packagecom.itheima.type;publicclassType3{publicstaticvoidmain(String[]args){//掌握强制类型转换inta=20;//byteb=a;报错,直接将类型范围大的变量转换为类型范围小的byteb=(byte)a;//alt+e......
  • java基础:表达式的自动类型转换
    1.表达式的自动类型转换:(1)在表达式中,小范围的变量,会自动转换为表达式中较大范围的类型,再参与运算代码:packagecom.itheima.type;publicclassType1{publicstaticvoidmain(String[]args){bytea=10;intb=20;longc=30;lon......
  • 11月13日js数据类型以及常见的方法
    目录js数据类型1.动态类型2.数值(number类型)3.常用方法1.parseInt方法2.parseFloat方法特殊的地方3.字符串(string)4.常见的方法索引和切片的相同点以及不同点js数据类型1.动态类型首先js是一种动态类型的语言,这意味着变量在运行时可以被赋予不同的数据类型。js的变量不需要在声明......
  • 对数据类型进行补充——逻辑类型及运算
    一.关于stdbool.h(布尔类型文件)(1)C语言标准(C89)没有定义布尔类型,使用true/false会出现错误;(2)头文件:#include<stdbool.h>;(3)输出仍然为整数,而不会是true/false的值;二.逻辑运算(对逻辑量进行运算,结果只有0或1)——————注明:逻辑量是关系运算或逻辑运算的结果(1)三种运算符及其......
  • 问题解答:SAP OData V2 和 V4 里针对日期类型的字段进行过滤操作(filter)的正确语法试
    我的知识星球里有朋友咨询一个问题:我测试了一个S/4HANAcloud的purchaseorder的API,这个是ODATAV4格式的。在对CreationDate做filter后运行有报错Invalidparametertypeusedwithfunction'eq'.对datetime字段做filter,一直搞不清楚格式。请帮忙看一下。本文就安排这......
  • (十三)C#编程基础复习——函数/方法详解
    C#中的函数(也可以称为方法)是一段具有签名(由函数名、参数类型和参数修饰符组成的函数信息)的代码块,可以用来实现特定的功能。一般情况下一个函数由以下几个部分组成:访问权限修饰符:用于指定函数对一个类的可见性;(public  公开的,公共的,同一程序集的其他任何代码或引用该程序集的其......