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
SQL Server开发接口生成方法相关推荐
- [转]SQL Server开发技巧
经常发现收藏的连接变成空连接,暂时将由于的内容拷贝过来,以免需要的时候找不到. http://www.microsoft.com/china/sql/using/tips/development/de ...
- sql server 开发最佳体验
公司看我比较闲,这周开始让我去做 sql-server 数据库开发. 一开始觉得数据库有什么好开发的,很多业务直接写到应用层,数据表操作和查询都直接让应用来写,不是挺好的嘛.但是看了一下已经写好的部分 ...
- SQL Server镜像自动生成脚本
SQL Server镜像自动生成脚本 镜像的搭建非常繁琐,花了一点时间写了这个脚本,方便大家搭建镜像 执行完这个镜像脚本之后,最好在每台机器都绑定一下hosts文件,不然的话,镜像可能会不work 1 ...
- SQL Server开发人员应聘常见问题妙解
SQL Server开发人员应聘常见问题妙解 目前在职场中很难找到非常合格的数据库开发人员.我的一个同事曾经说过:"SQL开发是一门语言,它很容易学,但是很难掌握." 在面试应聘的 ...
- Visual Studio 2019连接自动的Sql Server开发版数据库(C#语言)
Visual Studio 2019连接自动的Sql Server开发版数据库,C#语言 连接字符串: server=(LocalDB)\MSSQLLocalDB;database=master;in ...
- SQL Server 开发指南(经典教程)
SQL Server 开发指南 http://www.blogjava.net/hoojo/archive/2011/07/21/354788.html
- php从注册列表卸载,MSSQL_彻底删除SQL Server注册表的方法,一般在卸载完数据库时,大家 - phpStudy...
彻底删除SQL Server注册表的方法 一般在卸载完数据库时,大家都希望能够将注册表信息完全删干净,下面就将教您彻底删除SQL Server注册表的方法,供您参考. 在卸载SQL Server开始- ...
- 利用Navicat Premium将SQL Server数据库转为My SQL数据库(解决Mac无法打开SQL Server 脚本文件的方法)
利用Navicat Premium将SQL Server数据库转为My SQL数据库(解决Mac无法打开SQL Server 脚本文件的方法) 安装好Navicat Premium,SQL Serve ...
- mysql 存储过程 风险_删除/恢复SQL server危险的存储过程方法
删除/恢复SQL server危险的存储过程方法 有需要的朋友可参考一下本文章. 清除SQL Server 2000所有的危险扩展存储过程 --清除完后,需要对xplog70.dll文件进行改名 -- ...
最新文章
- C#学习笔记——捕获当前屏幕
- 第二次作业--线性表
- Semaphore 类
- .net Framework各个版本之间的发展
- OpenShift上具有NetBeans的Java EE
- 《HTML5 2D游戏编程核心技术》——第2章,第2.3节使用CSS背景
- python编译器大全_Python编译器
- 关于Oracle RAC基本概念
- 淘淘商城规格参数列表显示
- android支付宝免密支付功能,手机支付宝如何将免密支付功能关闭掉
- 四级单词pdf_英语单词里的字母到底有没有含义?
- JVM内存和垃圾回收-02.类加载子系统
- Python特定场景数据内型“解压”操作
- 如何取消QQ看点的消息通知?
- 如何更改win7系统里面的文件夹背景色为保护色
- BUUCTF qwb2018_opm
- 夫妻分居申办上海户口全攻略
- [整理]统计数据的可视化——数据的频数分布
- 制作食物官网及网页展示的过程
- 前端分页功能(封装好的组件)
热门文章
- UBUNTU : Destination Host Unreachable
- 设计模式笔记(7)---适配器模式(结构型)
- CentOS7 linux下yum安装redis以及使用
- RUNOOB python练习题25 递归实现阶乘
- 05 切片、迭代、列表生成
- 机器学习07应用机器学习的建议
- [CareerCup] 8.7 Chat Server 聊天服务器
- Python操作MongoDB - 极简教程
- 对MariaDB10.0的Sphinx进行扩展
- Codeforces Round #114 (Div. 1) A. Wizards and Trolleybuses 物理题