SQL Server开发接口生成方法

为提高开发效率,生成固定格式的接口是必须的,以下以提供新增/修改/删除/读取接口为例:

以常见的表结构为例,特殊表结构可自己尝试去调整方法

主要通过系视图 sys.columns生成方法:为包含列的对象(如视图或表)的每列返回一行。下面是包含列的对象类型的列表。

列名

数据类型

说明

object_id

int

此列所属对象的 ID。

name

sysname

列名。在对象中是唯一的。

column_id

int

列的 ID。在对象中是唯一的。

列 ID 可以不按顺序排列。

system_type_id

tinyint

列的系统类型的 ID。

user_type_id

int

用户定义的列类型的 ID。

若要返回该类型的名称,请在该列中联接到 sys.types 目录视图。

max_length

smallint

列的最大长度(字节)。

-1 = 列数据类型为 varchar(max)nvarchar(max)varbinary(max)xml

对于 text 列,max_length 值将是 16,或者是 sp_tableoption 'text in row' 所设置的值。

precision

tinyint

如果列包含的是数值,则为该列的精度;否则为 0。

scale

tinyint

如果基于数值,则为列的小数位数;否则为 0。

   
   
   

is_rowguidcol

bit

1 = 列为声明的 ROWGUIDCOL。

is_identity

bit

1 = 列具有标识值

1、在Test数据库生成方法                                                                         

if OBJECT_ID('Curdsqlstring','P') is not nullDROP PROC Curdsqlstring
go
CREATE PROCEDURE Curdsqlstring(@TableName sysname)
with encryption
AS
if OBJECT_ID(@TableName,'U') is nullreturn 0DECLARE @S NVARCHAR(MAX),@ColName NVARCHAR(MAX),@Identity sysname,@IdentityWHERE NVARCHAR(100),@Insert0 NVARCHAR(MAX),@Insert1 NVARCHAR(MAX),@Insert2 NVARCHAR(MAX),@Insert3 NVARCHAR(MAX)  ,@UPDATE0 NVARCHAR(MAX)   ,@UPDATE1 NVARCHAR(MAX),@UPDATE2 NVARCHAR(MAX),@UPDATE3 NVARCHAR(MAX),@SELECTWHERE0 NVARCHAR(MAX),@SELECTWHERE1 NVARCHAR(MAX),@SELECT0 NVARCHAR(MAX),@SELECT1 NVARCHAR(MAX),@DELETE NVARCHAR(MAX),@ColName2 NVARCHAR(MAX),@ObjectID INT,@UPDATECol1 NVARCHAR(MAX),@ColAll NVARCHAR(MAX),@InputCol sysname,@Write NVARCHAR(100),@OutputAll NVARCHAR(1000),@TableName2 sysname
SELECT @Write='Roy'+char(32)+char(32)+char(32)+convert(varchar(10),getdate(),120),@Insert2='',@Insert3=''SELECT @S=CASE WHEN a.is_computed=1 THEN @S ELSE ISNULL(@s+',','')+'@'+Name+char(32)+ TYPE_NAME(user_type_id)+CASE	when user_type_id in(34,35,36,48,52,56,58,59,60,61,62,98,99,104,122,127,189,241,256,241,40,41,129) then '' when user_type_id in(106,108) then '('+rtrim(Precision)+','+rtrim(Scale)+')'when user_type_id in (231,239) then  CASE when  max_length=-1 then '(max)' else '('+rtrim(max_length/2)+')' endwhen max_length=-1 then '(Max)'else '('+rtrim(max_length)+')' end+CASE	when is_identity=1 then char(32)+'OUTPUT' else '' end END,@ColName=CASE when is_identity=1 OR a.is_computed=1 THEN @ColName else isnull(@ColName+',','')+quotename(Name) end,@ColName2=CASE when is_identity=1 OR a.is_computed=1 then @ColName2 else isnull(@ColName2+',','')+'@'+Name end,@UPDATECol1=CASE when Name!=N'ID'  AND NOT EXISTS ( SELECT 1FROM   sys.objects xJOIN sys.indexes y ON x.type = N'PK'AND x.name = y.nameJOIN sysindexkeys z ON z.id = x.object_idAND z.indid = y.index_idAND z.colid = a.Column_id AND x.object_id=a.object_id) AND a.is_computed=0 THEN ISNULL(@UPDATECol1+',','')+QUOTENAME(Name)+'='+'@'+Name ELSE @UPDATECol1 END,@IdentityWHERE=isnull(@IdentityWHERE,'')+CASE when COLUMNPROPERTY (OBJECT_ID, Name , 'IsIdentity' )=1 OR Name=N'ID' then quotename(Name)+'='+'@'+Name  ELSE '' end,@ColAll=isnull(@ColAll+',','')+quotename(Name),@OutputAll=isnull(@OutputAll+',','')+'@'+Name
from Sys.columns AS a
WHERE a.OBJECT_ID=OBJECT_ID(@TableName)
order by CASE when Name='ID' then 0 else 1 end,Column_idIF @IdentityWHERE = ''SELECT   @IdentityWHERE = @IdentityWHERE+CASE WHEN @IdentityWHERE > '' AND EXISTS ( SELECT 1FROM   sys.objects xJOIN sys.indexes y ON x.type = N'PK'AND x.name = y.nameJOIN sysindexkeys z ON z.id = a.object_idAND z.indid = y.index_idAND z.colid = a.Column_id ) THEN ' AND 'ELSE ''END+ CASE WHEN EXISTS ( SELECT 1FROM   sys.objects xJOIN sys.indexes y ON x.type = N'PK'AND x.name = y.nameJOIN sysindexkeys z ON z.id = a.object_idAND z.indid = y.index_idAND z.colid = a.Column_id )THEN QUOTENAME(name) + '=' + '@' + nameELSE ''ENDFROM     sys.columns AS aWHERE    object_id = OBJECT_ID(@TableName)ORDER BY column_idIF @IdentityWHERE=''SELECT TOP 1 @IdentityWHERE=quotename(Name)+'='+'@'+Name FROM sys.columns WHERE OBJECT_ID=OBJECT_ID(@TableName) ORDER BY column_id
--主键为第一列
SELECT @Identity=replace(left(@s,charindex(',',@s)-1),char(32)+'output',''),@ObjectID=OBJECT_ID(@TableName),@TableName=replace(replace(stuff(@TableName,1,charindex('.',@TableName),''),']',''),'[',''),@TableName2=CASE WHEN @TableName NOT LIKE '%.%' THEN ''+OBJECT_SCHEMA_NAME(@ObjectID)+'.'+@TableName ELSE @TableName ENDSELECT @Insert1='CREATE PROCEDURE c'+@TableName+char(10)+char(9)+char(9)+'('+@s+')'+char(10)+'AS',@Insert2='INSERT INTO '+@TableName2+char(10)+char(9)+'('+@ColName+')',@Insert3='VALUES'+char(10)+char(9)+'('+@ColName2+')'+CASE	when exists(SELECT 1 from Sys.columns WHERE OBJECT_ID=@ObjectID and is_identity=1) then char(10)+char(10)+'SET '+left(@Identity,charindex(char(32),@Identity)-1)+'=SCOPE_IDENTITY()' else '' end,@UPDATE1='CREATE PROCEDURE u'+@TableName+char(10)+char(9)+char(9)+'('+replace(@s,char(32)+'output','')+')'+char(10)+'AS',@UPDATE2='UPDATE '+@TableName2+char(10)+'SET '+@UPDATECol1,@UPDATE3='WHERE '+@IdentityWHERE,@SELECTWHERE1='CREATE PROCEDURE r'+@TableName+'By'+stuff(left(@Identity,charindex(char(32),@Identity)-1),1,1,'')+char(10)+char(9)+char(9)+'('+@Identity+')'+char(10)+'AS'+char(10)+'SET NOCOUNT ON;'+char(10)+'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;'+char(10)+'SELECT '+char(10)+char(9)+@ColAll+char(10)+'From'+char(10)+char(9)+@TableName2+char(10)+'WHERE'+char(10)+char(9)+@IdentityWHERE,@SELECT1='CREATE PROCEDURE r'+@TableName+'ForAll'+char(10)+'AS'+char(10)+'SET NOCOUNT ON;'+char(10)+'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;'+char(10)+'SELECT '+char(10)+char(9)+@ColAll+char(10)+'From'+char(10)+char(9)+@TableName2,@DELETE='CREATE PROCEDURE d'+@TableName+char(10)+char(9)+'('+@Identity+')'+char(10)+'AS'+char(10)+'DELETE '+@TableName2+char(32)+'WHERE'+char(32)+@IdentityWHERE,@InputCol=CASE when exists(SELECT 1 from Sys.columns WHERE OBJECT_ID=@ObjectID and is_identity=1) then @Identity else '' end--Insert
SELECT @Insert0=
'if OBJECT_ID('+quotename('c'+@TableName,'''')+',''P'') is not null'+char(13)+char(9)+'DROP PROC '+quotename('c'+@TableName)
+char(10)+'Go'+char(13)+char(10)+'/'+replicate('*',160)+char(10)+
'%%存储过程名:c'+@TableName+char(10)+char(10)+
'%%输入参数:'+@ColName2+char(10)+char(10)+
'%%输出参数:'+@InputCol+char(10)+char(10)+
'%%功能:新增记录在表'+@TableName+char(10)+replicate('*',160)+char(10)+
'%%编写:'+@Write+char(10)+char(10)+replicate('*',160)+'/'
,--UPDATE@UPDATE0=
'if OBJECT_ID('+quotename('u'+@TableName,'''')+',''P'') is not null'+char(13)+char(9)+'DROP PROC '+quotename('u'+@TableName)
+char(10)+'Go'+char(13)+char(10)+'/'+replicate('*',160)+char(10)+
'%%存储过程名:u'+@TableName+char(10)+char(10)+
'%%输入参数:'+@OutputAll+char(10)+char(10)+
'%%输出参数:'+char(10)+char(10)+
'%%功能:修改记录在表'+@TableName+char(10)+replicate('*',160)+char(10)+
'%%编写:'+@Write+char(10)+char(10)+replicate('*',160)+'/'
,
--SELECTWHERE
@SELECTWHERE0=
'if OBJECT_ID('+quotename('r'+@TableName+'By'+stuff(left(@Identity,charindex(char(32),@Identity)-1),1,1,''),'''')+',''P'') is not null'+char(13)+char(9)+'DROP PROC '+quotename('r'+@TableName+'By'+stuff(left(@Identity,charindex(char(32),@Identity)-1),1,1,''))
+char(10)+'Go'+char(13)+char(10)+'/'+replicate('*',160)+char(10)
+'%%存储过程名:r'+@TableName+'By'+stuff(left(@Identity,charindex(char(32),@Identity)-1),1,1,'')+char(10)+char(10)
+N'%%输入参数:'+@Identity+char(10)+char(10)
+N'%%输出参数:'+char(10)+char(10)
+N'%%功能:根据条件读取记录在表'+@TableName+char(10)+replicate('*',160)+char(10)
+'%%编写:'+@Write+char(10)+char(10)+replicate('*',160)+'/',
--SELECT 
@SELECT0=
'if OBJECT_ID('+quotename('r'+@TableName+'ForAll','''')+',''P'') is not null'+char(13)+char(9)+'DROP PROC '+quotename('r'+@TableName+'ForAll')
+char(10)+'Go'+char(13)+char(10)+'/'+replicate('*',160)+char(10)
+'%%存储过程名:r'+@TableName+'ForAll'+char(10)+char(10)
+'%%输入参数:'+char(10)+char(10)
+'%%输出参数:'+char(10)+char(10)
+'%%功能:读取记录在表'+@TableName+char(10)+replicate('*',160)+char(10)
+'%%编写:'+@Write+char(10)+char(10)+replicate('*',160)+'/',@DELETE=
'if OBJECT_ID('+quotename('d'+@TableName,'''')+',''P'') is not null'+char(13)+char(9)+'DROP PROC '+quotename('d'+@TableName)
+char(10)+'Go'+char(13)+char(10)+'/'+replicate('*',160)+char(10)
+'%%存储过程名:d'+@TableName+char(10)+char(10)
+'%%输入参数:'+char(10)+char(10)
+'%%输出参数:'+@Identity+char(10)+char(10)
+'%%功能:删除记录在表'+@TableName+char(10)+replicate('*',160)+char(10)
+'%%编写:'+@Write+char(10)+char(10)+replicate('*',160)+'/'+char(10)
+@DELETE+char(13)+char(10)+'Go'+char(13)+char(10)print 'USE '+db_name()+char(13)+char(10)+'Go'+char(13)+char(10)
PRINT @Insert0
print @Insert1
print @Insert2
print @Insert3
PRINT 'Go'+char(13)+char(10)
print @UPDATE0
print @UPDATE1
print @UPDATE2
print @UPDATE3
PRINT 'Go'+char(13)+char(10)
print @SELECTWHERE0
print @SELECTWHERE1
PRINT 'Go'+char(13)+char(10)
print @SELECT0
print @SELECT1
PRINT 'Go'+char(13)+char(10)
print @DELETEgo
exec sp_ms_marksystemobject 'CurdSqlString'--添加在系统存储过程目录
go

  

2、创建表Tab1

e.g.

USE [test]
GO/****** Object:  Table [dbo].[Tab1]    Script Date: 2016/5/6 11:51:47 ******/
IF OBJECT_ID('Tab1','U') IS NOT NULL
DROP TABLE [dbo].[Tab1]
GO
CREATE TABLE [dbo].[Tab1]([ID] [BIGINT] NULL,[Name] [sysname] NOT NULL
) ON [PRIMARY]GO

3、调用方法:

--调用方法:
exec CurdSqlString 'Tab1'-- 表名

显示效果:

USE test
Go
if OBJECT_ID('cTab1','P') is not nullDROP PROC [cTab1]
Go
/****************************************************************************************************************************************************************
%%存储过程名:cTab1%%输入参数:@ID,@Name%%输出参数:%%功能:新增记录在表Tab1
****************************************************************************************************************************************************************
%%编写:Roy   2016-05-06****************************************************************************************************************************************************************/
CREATE PROCEDURE cTab1(@ID bigint,@Name sysname)
AS
INSERT INTO dbo.Tab1([ID],[Name])
VALUES(@ID,@Name)
Go
if OBJECT_ID('uTab1','P') is not nullDROP PROC [uTab1]
Go
/****************************************************************************************************************************************************************
%%存储过程名:uTab1%%输入参数:@ID,@Name%%输出参数:%%功能:修改记录在表Tab1
****************************************************************************************************************************************************************
%%编写:Roy   2016-05-06****************************************************************************************************************************************************************/
CREATE PROCEDURE uTab1(@ID bigint,@Name sysname)
AS
UPDATE dbo.Tab1
SET [Name]=@Name
WHERE [ID]=@ID
Go
if OBJECT_ID('rTab1ByID','P') is not nullDROP PROC [rTab1ByID]
Go
/****************************************************************************************************************************************************************
%%存储过程名:rTab1ByID%%输入参数:@ID bigint%%输出参数:%%功能:根据条件读取记录在表Tab1
****************************************************************************************************************************************************************
%%编写:Roy   2016-05-06****************************************************************************************************************************************************************/
CREATE PROCEDURE rTab1ByID(@ID bigint)
AS
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT [ID],[Name]
Fromdbo.Tab1
WHERE[ID]=@ID
Go
if OBJECT_ID('rTab1ForAll','P') is not nullDROP PROC [rTab1ForAll]
Go
/****************************************************************************************************************************************************************
%%存储过程名:rTab1ForAll%%输入参数:%%输出参数:%%功能:读取记录在表Tab1
****************************************************************************************************************************************************************
%%编写:Roy   2016-05-06****************************************************************************************************************************************************************/
CREATE PROCEDURE rTab1ForAll
AS
SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SELECT [ID],[Name]
Fromdbo.Tab1
Go
if OBJECT_ID('dTab1','P') is not nullDROP PROC [dTab1]
Go
/****************************************************************************************************************************************************************
%%存储过程名:dTab1%%输入参数:%%输出参数:@ID bigint%%功能:删除记录在表Tab1
****************************************************************************************************************************************************************
%%编写:Roy   2016-05-06****************************************************************************************************************************************************************/
CREATE PROCEDURE dTab1(@ID bigint)
AS
DELETE dbo.Tab1 WHERE [ID]=@ID
Go

 

 

转载于:https://www.cnblogs.com/Roy_88/p/5473840.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue-cli2定制ant-design-vue主题

本篇是vue-cli2定制主题,vue-cli3通过vue.config.js定制主题点击此处 1.引入less和less-loader(如果报错,请将less-loader版本更改到5.0.0) npm install less less-loader --save2.在 vue cli 2 中定制主题,修改build…

python中thread的setDaemon、join的用法

From: http://doudouclever.blog.163.com/blog/static/17511231020127232303469/ python中得thread的一些机制和C/C不同:在C/C中,主线程结束后,其子线程会默认被主线程kill掉。而在python中,主线程结束后,会默认等待子…

谈谈软件兼容性测试

1.软件兼容性测试兼容性测试之待测试项目在特定的硬件平台上,不同的应用软件不同,不同的操作系统平台上,在不同的网络等环境中能正常的运行的测试。兼容性测试的目的:带测试项目在不同的操作系统上正常运行,包括待测试…

YUV视频格式分析

Andrew Huang <bluedrum163.com> 转载请注明作者及联络方式在摄像头之类编程经常是会碰到YUV格式,而非大家比较熟悉的RGB格式. 我们可以把YUV看成是一个RGB的变种来理解.YUV的原理是把亮度与色度分离&#xff0c;研究证明,人眼对亮度的敏感超过色度。利用这个原理&#x…

自定义ant中table表格的展开图标 修改ant-vue-design中嵌套表格table的expandIcon自定义图标

效果&#xff1a; 1. <a-table:expandIcon"expandIcon":loading"loading":columns"columns":data-source"data"class"components-table-demo-nested"change"onChangeTable":scroll"{x:1300,y:y}":p…

Foundationd和Application Kit的类层次

Foundationd类 Application Kit类 转载于:https://www.cnblogs.com/ikodota/archive/2012/08/01/2618590.html

python多线程编程(1): python对多线程的支持

From: http://www.cnblogs.com/holbrook/archive/2012/03/01/2376408.html 前面介绍过多线程的基本概念&#xff0c;理解了这些基本概念&#xff0c;掌握python多线程编程就比较容易了。 在开始之前&#xff0c;首先要了解一下python对多线程的支持。 虚拟机层面 Python虚拟机…

三个数从小到大排序

描述 现在要写一个程序&#xff0c;实现给三个数排序的功能 输入输入三个正整数 输出给输入的三个正整数排序 样例输入20 7 33 样例输出 7 20 33 测试代码 1 #include "stdio.h"2 3 int main()4 {5 int a, b, c, t;6 scanf("%d%d%d", &a, &…

监听vuex的某条数据

需要现在计算属性里获取 computed: {tabType: {get() {return this.$store.state.tabType;},set(val) {this.$store.state.tabType val;},}},watch: {tabType(val) {this.allType this.$store.state.tabType;}, }

dup和dup2的使用方法

/*本文通过标准输出的重定向和恢复的过程来解释dup和dup2的使用方法*/#include <stdio.h> #include <unistd.h>#include <fcntl.h>//STDIN_FILENO标准输入描述符&#xff08;0&#xff09;//STDOUT_FILENO标准输出描述符&#xff08;1&#xff09; //STDERR_…

django时间问题和时区设置

django里默认设置了一个时区&#xff0c;我在django里调time获取时间&#xff0c;与系统时间出现不一致的情况&#xff0c;所以我们需要重启设置时区&#xff0c;如下&#xff1a;在settings.py里面把TIME_ZONE设为&#xff1a;Etc/GMT-8 转载于:https://blog.51cto.com/linuxs…

python多线程编程(2): 线程的创建、启动、挂起和退出

From: http://www.cnblogs.com/holbrook/archive/2012/03/02/2376940.html 如上一节&#xff0c;python的threading.Thread类有一个run方法&#xff0c;用于定义线程的功能函数&#xff0c;可以在自己的线程类中覆盖该方法。而创建自己的线程实例后&#xff0c;通过Thread类的…

记录ie下报XMLHttpRequest: 网络错误 0x80070005, 拒绝访问。

问题&#xff1a; 同样的调用接口&#xff0c;在谷歌是没有问题的&#xff0c;但是在ie下报错XMLHttpRequest: 网络错误 0x80070005, 拒绝访问。 1.分析&#xff1a; 对比了一下&#xff0c;相同的是接口传递参数错误导致报错&#xff0c;传递的参数自动带上了 " "…

getopt和getopt_long函数

平时在写程序时常常需要对命令行参数进行处理&#xff0c;当命令行参数个数较多时&#xff0c;如果按照顺序一个一个定义参数含义很容易造成混乱&#xff0c;而且如果程序只按顺序处理参数的话&#xff0c;一些“可选参数”的功能将很难实现。 在Linux中&#xff0c;我们可以使…

MVC3.0+DWZ探索

将themes 文件移到 js文件 index.html 转载于:https://www.cnblogs.com/acyy/archive/2012/08/03/2621594.html

棋盘覆盖

在一个2k x 2k ( 即&#xff1a;2^k x 2^k )个方格组成的棋盘中&#xff0c;恰有一个方格与其他方格不同&#xff0c;称该方格为一特殊方格&#xff0c;且称该棋盘为一特殊棋盘。在棋盘覆盖问题中&#xff0c;要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外…

VMM2012应用指南之12- 创建自助服务用户并分配云

河北经贸大学 王春海如果要在云中创建、管理虚拟机&#xff0c;首先要创建自助服务帐户&#xff0c;在创建用户角色的同时即可以分配云。本节介绍这部分内容。【说明】在做下面的这个操作的时候&#xff0c;需要向“库”服务器再添加另外一个库的路径&#xff0c;用于保存云中的…

分隔符字符串处理(strtok与strsep区别)

1、strtok原型与应用原型&#xff1a;char *strtok(char *src, const char *delim);功能&#xff1a;将src(原字符串)根据delim(分隔符串)分解为不同子串&#xff08;连续算一个&#xff09;返回&#xff1a;属于当前分割的子串&#xff0c;当前没有分割的子串时返回NULL#inclu…

解决vue项目在ie浏览器下白屏问题;ie运行项目报正在兼容性是图中运行,因为选中了“在兼容性视图中显示Intranet站点”

如果已经配置了babel-polyfill&#xff0c;在ie下依然白屏&#xff0c;打开控制台刷新&#xff0c;看看是否报 正在兼容性是图中运行&#xff0c;因为选中了“在兼容性视图中显示Intranet站点” 如图 解决方案 在ie浏览器—设置—兼容性视图设置&#xff08;B&#xff09;…