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

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

主要通过系视图 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 null
DROP PROC Curdsqlstring
go
CREATE PROCEDURE Curdsqlstring(
@TableName sysname
)
with encryption
AS
if OBJECT_ID(@TableName,'U') is null
return 0 DECLARE @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)+')' end
when 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 1
FROM sys.objects x
JOIN sys.indexes y ON x.type = N'PK'
AND x.name = y.name
JOIN sysindexkeys z ON z.id = x.object_id
AND z.indid = y.index_id
AND 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_id IF @IdentityWHERE = ''
SELECT @IdentityWHERE = @IdentityWHERE+CASE WHEN @IdentityWHERE > '' AND EXISTS ( SELECT 1
FROM sys.objects x
JOIN sys.indexes y ON x.type = N'PK'
AND x.name = y.name
JOIN sysindexkeys z ON z.id = a.object_id
AND z.indid = y.index_id
AND z.colid = a.Column_id ) THEN ' AND '
ELSE ''
END
+ CASE WHEN EXISTS ( SELECT 1
FROM sys.objects x
JOIN sys.indexes y ON x.type = N'PK'
AND x.name = y.name
JOIN sysindexkeys z ON z.id = a.object_id
AND z.indid = y.index_id
AND z.colid = a.Column_id )
THEN QUOTENAME(name) + '=' + '@' + name
ELSE ''
END
FROM sys.columns AS a
WHERE object_id = OBJECT_ID(@TableName)
ORDER BY column_id IF @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 END SELECT @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 @DELETE go
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 null
DROP 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 null
DROP 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 null
DROP 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]
From
dbo.Tab1
WHERE
[ID]=@ID
Go
if OBJECT_ID('rTab1ForAll','P') is not null
DROP 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]
From
dbo.Tab1
Go
if OBJECT_ID('dTab1','P') is not null
DROP PROC [dTab1]
Go
/****************************************************************************************************************************************************************
%%存储过程名:dTab1 %%输入参数: %%输出参数:@ID bigint %%功能:删除记录在表Tab1
****************************************************************************************************************************************************************
%%编写:Roy 2016-05-06 ****************************************************************************************************************************************************************/
CREATE PROCEDURE dTab1
(@ID bigint)
AS
DELETE dbo.Tab1 WHERE [ID]=@ID
Go

SQL Server开发接口生成方法的更多相关文章

  1. Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程

    原文:Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列之三 SQL S ...

  2. 删除SQL Server大容量日志的方法(转)

    删除SQL Server大容量日志的方法 亲自实践的方法 1.分享数据库,如果提示被其他连接占用,不能分离,刚勾上drop connections 2.复制下所有文件,一定要备份好,以防自己操作失误 ...

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

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

  4. C#将图片存放到SQL SERVER数据库中的方法

    本文实例讲述了C#将图片存放到SQL SERVER数据库中的方法.分享给大家供大家参考.具体如下: 第一步: ? 1 2 3 4 5 6 7 8 9 10 //获取当前选择的图片 this.pictu ...

  5. SQL Server存储过程的删除方法

    SQL Server存储过程的删除方法使我们经常会用到的,下面就为您介绍扩展存储过程的删除方法,如果您对SQL Server存储过程方面感兴趣的话,不妨一看. --清除SQL Server所有的危险扩 ...

  6. [转]SQL SERVER数据库还原的方法

    SQL SERVER数据库还原的方法 在SQL SERVER 2005下还原数据库 1.新建数据库A,右键还原数据库,此时目标数据库为A,选择备份 文件B_db_201311040200.BAK,还原 ...

  7. SQL Server修改标识列方法(备忘)

    原文:SQL Server修改标识列方法(备忘) SQL Server修改标识列方法 ----允许对系统表进行更新 exec sp_configure 'allow updates',1 reconf ...

  8. Update导致SQL Server死锁的典型方法(转载)

    此文为转载文章,描述的很好,没有验证过. 最近遇到了一个看上去很奇怪,分析起来很有意思的死锁问题.这个死锁看上去难以理解.而分析过程中,又使用了很多分析SQL Server死锁的典型方法.记录下来整个 ...

  9. 1. SQL Server服务器监控实现方法

    对于服务器的监控,和对数据库的监控,很少有合二为一的工具,如果有的话,一般是付费软件,或者自行开发的工具.所以如果不想购买软件,也不想花精力去开发的话,可以结合一些免费/开源的工具.自定义脚本,来完成 ...

随机推荐

  1. 2016暑假多校联合---Death Sequence(递推、前向星)

    原题链接 Problem Description You may heard of the Joseph Problem, the story comes from a Jewish historia ...

  2. Hibernate(九)__OpenSessionInView解决懒加载问题

    什么是OpenSessionInView? 在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时session已关 ...

  3. Webform(文件上传)

    1.HTML编码: <input type="file" /> 2.控件:FileUpload 它是用来选择要上传的文件,还需要一个按钮来将选中的文件上传到服务器上 s ...

  4. a标签的target属性

    _blank 浏览器总在一个新打开.未命名的窗口中载入目标文档. _self 这个目标的值对所有没有指定目标的 <a> 标签是默认目标,它使得目标文档载入并显示在相同的框架或者窗口中作为源 ...

  5. Numeral.js – 格式化和操作数字的 JavaScript 库

    Numeral.js 是一个用于格式化和操作数字的 JavaScript 库.数字可以格式化为货币,百分比,时间,甚至是小数,千位,和缩写格式,功能十分强大.支持包括中文在内的17种语言. 您可能感兴 ...

  6. 由Vue引发的getter和setter思考

    公司的新项目决定使用Vue.js来做,当我打印出Vue实例下的data对象里的属性时,发现了一个有趣的事情: 它的每个属性都有两个相对应的get和set方法,我觉的这是多此一举的,于是去网上查了查Vu ...

  7. SharePoint2010升级到SharePoint2013操作手册

    SharePoint2010升级到SharePoint2013操作手册 目 录 第一章 前言    3 第二章 升级前准备    3 第三章 升级流程图    5 第四章 升级过程    5 4.1 ...

  8. SharePoint 2013 WebPart 管理工具分享[开源]

    前言 之前做门户的时候,经常要导入导出WebPart,非常的频繁,然后就需要一个个导出,然后一个个导入,非常繁琐:闲暇之际,就考虑能不能自动化一下,把这个功能写成一个工具,可以方便的管理WebPart ...

  9. [SharePoint] SharePoint 错误集 3

    阅读目录 1. workflow 流程走不下去,报 workflow fails to run 的错误 2. 安装sharepoint prerequisit总是在web server (iis)这步 ...

  10. Maltego实体分类与Transform

    分类 实体类型 描述 Devices (设备类) Device 表示一个设备,如一个手机或相机. Infrastructure (基础结构类) AS 一个互联网自治系统   DNS Name 域名系统 ...