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

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

主要通过系视图 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开发接口生成方法相关推荐

  1. [转]SQL Server开发技巧

    经常发现收藏的连接变成空连接,暂时将由于的内容拷贝过来,以免需要的时候找不到. http://www.microsoft.com/china/sql/using/tips/development/de ...

  2. sql server 开发最佳体验

    公司看我比较闲,这周开始让我去做 sql-server 数据库开发. 一开始觉得数据库有什么好开发的,很多业务直接写到应用层,数据表操作和查询都直接让应用来写,不是挺好的嘛.但是看了一下已经写好的部分 ...

  3. SQL Server镜像自动生成脚本

    SQL Server镜像自动生成脚本 镜像的搭建非常繁琐,花了一点时间写了这个脚本,方便大家搭建镜像 执行完这个镜像脚本之后,最好在每台机器都绑定一下hosts文件,不然的话,镜像可能会不work 1 ...

  4. SQL Server开发人员应聘常见问题妙解

    SQL Server开发人员应聘常见问题妙解 目前在职场中很难找到非常合格的数据库开发人员.我的一个同事曾经说过:"SQL开发是一门语言,它很容易学,但是很难掌握." 在面试应聘的 ...

  5. Visual Studio 2019连接自动的Sql Server开发版数据库(C#语言)

    Visual Studio 2019连接自动的Sql Server开发版数据库,C#语言 连接字符串: server=(LocalDB)\MSSQLLocalDB;database=master;in ...

  6. SQL Server 开发指南(经典教程)

    SQL Server 开发指南 http://www.blogjava.net/hoojo/archive/2011/07/21/354788.html

  7. php从注册列表卸载,MSSQL_彻底删除SQL Server注册表的方法,一般在卸载完数据库时,大家 - phpStudy...

    彻底删除SQL Server注册表的方法 一般在卸载完数据库时,大家都希望能够将注册表信息完全删干净,下面就将教您彻底删除SQL Server注册表的方法,供您参考. 在卸载SQL Server开始- ...

  8. 利用Navicat Premium将SQL Server数据库转为My SQL数据库(解决Mac无法打开SQL Server 脚本文件的方法)

    利用Navicat Premium将SQL Server数据库转为My SQL数据库(解决Mac无法打开SQL Server 脚本文件的方法) 安装好Navicat Premium,SQL Serve ...

  9. mysql 存储过程 风险_删除/恢复SQL server危险的存储过程方法

    删除/恢复SQL server危险的存储过程方法 有需要的朋友可参考一下本文章. 清除SQL Server 2000所有的危险扩展存储过程 --清除完后,需要对xplog70.dll文件进行改名 -- ...

最新文章

  1. C#学习笔记——捕获当前屏幕
  2. 第二次作业--线性表
  3. Semaphore 类
  4. .net Framework各个版本之间的发展
  5. OpenShift上具有NetBeans的Java EE
  6. 《HTML5 2D游戏编程核心技术》——第2章,第2.3节使用CSS背景
  7. python编译器大全_Python编译器
  8. 关于Oracle RAC基本概念
  9. 淘淘商城规格参数列表显示
  10. android支付宝免密支付功能,手机支付宝如何将免密支付功能关闭掉
  11. 四级单词pdf_英语单词里的字母到底有没有含义?
  12. JVM内存和垃圾回收-02.类加载子系统
  13. Python特定场景数据内型“解压”操作
  14. 如何取消QQ看点的消息通知?
  15. 如何更改win7系统里面的文件夹背景色为保护色
  16. BUUCTF qwb2018_opm
  17. 夫妻分居申办上海户口全攻略
  18. [整理]统计数据的可视化——数据的频数分布
  19. 制作食物官网及网页展示的过程
  20. 前端分页功能(封装好的组件)

热门文章

  1. UBUNTU : Destination Host Unreachable
  2. 设计模式笔记(7)---适配器模式(结构型)
  3. CentOS7 linux下yum安装redis以及使用
  4. RUNOOB python练习题25 递归实现阶乘
  5. 05 切片、迭代、列表生成
  6. 机器学习07应用机器学习的建议
  7. [CareerCup] 8.7 Chat Server 聊天服务器
  8. Python操作MongoDB - 极简教程
  9. 对MariaDB10.0的Sphinx进行扩展
  10. Codeforces Round #114 (Div. 1) A. Wizards and Trolleybuses 物理题