SQL Server开发接口生成方法

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

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

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)+‘.‘[email protected] ELSE @TableName END

SELECT @Insert1=‘CREATE PROCEDURE c‘[email protected]+char(10)+char(9)+char(9)+‘(‘[email protected]+‘)‘+char(10)+‘AS‘,
				@Insert2=‘INSERT INTO ‘[email protected]+char(10)+char(9)+‘(‘[email protected]+‘)‘,
				@Insert3=‘VALUES‘+char(10)+char(9)+‘(‘[email protected]+‘)‘
				+CASE	when exists(SELECT 1 from Sys.columns WHERE [email protected] 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‘[email protected]+char(10)+char(9)+char(9)+‘(‘+replace(@s,char(32)+‘output‘,‘‘)+‘)‘+char(10)+‘AS‘,
				@UPDATE2=‘UPDATE ‘[email protected]+char(10)+‘SET ‘[email protected],
				@UPDATE3=‘WHERE ‘[email protected],
		@SELECTWHERE1=‘CREATE PROCEDURE r‘[email protected]+‘By‘+stuff(left(@Identity,charindex(char(32),@Identity)-1),1,1,‘‘)+char(10)+char(9)+char(9)+‘(‘[email protected]+‘)‘+char(10)+‘AS‘+char(10)
					+‘SET NOCOUNT ON;‘+char(10)+‘SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;‘+char(10)+
					‘SELECT ‘+char(10)+char(9)[email protected]+char(10)+‘From‘+char(10)+char(9)[email protected]+char(10)+‘WHERE‘+char(10)+char(9)[email protected],
		@SELECT1=‘CREATE PROCEDURE r‘[email protected]+‘ForAll‘+char(10)+‘AS‘+char(10)+
					‘SET NOCOUNT ON;‘+char(10)+‘SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;‘+char(10)+
					‘SELECT ‘+char(10)+char(9)[email protected]+char(10)+‘From‘+char(10)+char(9)[email protected],
		@DELETE=‘CREATE PROCEDURE d‘[email protected]+char(10)+char(9)+‘(‘[email protected]+‘)‘+char(10)+‘AS‘+char(10)+‘DELETE ‘[email protected]+char(32)+‘WHERE‘+char(32)[email protected],
		@InputCol=CASE when exists(SELECT 1 from Sys.columns WHERE [email protected] and is_identity=1) then @Identity else ‘‘ end

--Insert
SELECT @Insert0=
‘if OBJECT_ID(‘+quotename(‘c‘[email protected],‘‘‘‘)+‘,‘‘P‘‘) is not null‘+char(13)+char(9)+‘DROP PROC ‘+quotename(‘c‘[email protected])
+char(10)+‘Go‘+char(13)+char(10)+‘/‘+replicate(‘*‘,160)+char(10)+
‘%%存储过程名:c‘[email protected]+char(10)+char(10)+
‘%%输入参数:‘[email protected]+char(10)+char(10)+
‘%%输出参数:‘[email protected]+char(10)+char(10)+
‘%%功能:新增记录在表‘[email protected]+char(10)+replicate(‘*‘,160)+char(10)+
‘%%编写:‘[email protected]+char(10)+char(10)+replicate(‘*‘,160)+‘/‘
,

--UPDATE

@UPDATE0=
‘if OBJECT_ID(‘+quotename(‘u‘[email protected],‘‘‘‘)+‘,‘‘P‘‘) is not null‘+char(13)+char(9)+‘DROP PROC ‘+quotename(‘u‘[email protected])
+char(10)+‘Go‘+char(13)+char(10)+‘/‘+replicate(‘*‘,160)+char(10)+
‘%%存储过程名:u‘[email protected]+char(10)+char(10)+
‘%%输入参数:‘[email protected]+char(10)+char(10)+
‘%%输出参数:‘+char(10)+char(10)+
‘%%功能:修改记录在表‘[email protected]+char(10)+replicate(‘*‘,160)+char(10)+
‘%%编写:‘[email protected]+char(10)+char(10)+replicate(‘*‘,160)+‘/‘
,
--SELECTWHERE
@SELECTWHERE0=
‘if OBJECT_ID(‘+quotename(‘r‘[email protected]+‘By‘+stuff(left(@Identity,charindex(char(32),@Identity)-1),1,1,‘‘),‘‘‘‘)+‘,‘‘P‘‘) is not null‘+char(13)+char(9)+‘DROP PROC ‘+quotename(‘r‘[email protected]+‘By‘+stuff(left(@Identity,charindex(char

(32),@Identity)-1),1,1,‘‘))
+char(10)+‘Go‘+char(13)+char(10)+‘/‘+replicate(‘*‘,160)+char(10)
+‘%%存储过程名:r‘[email protected]+‘By‘+stuff(left(@Identity,charindex(char(32),@Identity)-1),1,1,‘‘)+char(10)+char(10)
+N‘%%输入参数:‘[email protected]+char(10)+char(10)
+N‘%%输出参数:‘+char(10)+char(10)
+N‘%%功能:根据条件读取记录在表‘[email protected]+char(10)+replicate(‘*‘,160)+char(10)
+‘%%编写:‘[email protected]+char(10)+char(10)+replicate(‘*‘,160)+‘/‘,
--SELECT
@SELECT0=
‘if OBJECT_ID(‘+quotename(‘r‘[email protected]+‘ForAll‘,‘‘‘‘)+‘,‘‘P‘‘) is not null‘+char(13)+char(9)+‘DROP PROC ‘+quotename(‘r‘[email protected]+‘ForAll‘)
+char(10)+‘Go‘+char(13)+char(10)+‘/‘+replicate(‘*‘,160)+char(10)
+‘%%存储过程名:r‘[email protected]+‘ForAll‘+char(10)+char(10)
+‘%%输入参数:‘+char(10)+char(10)
+‘%%输出参数:‘+char(10)+char(10)
+‘%%功能:读取记录在表‘[email protected]+char(10)+replicate(‘*‘,160)+char(10)
+‘%%编写:‘[email protected]+char(10)+char(10)+replicate(‘*‘,160)+‘/‘,

@DELETE=
‘if OBJECT_ID(‘+quotename(‘d‘[email protected],‘‘‘‘)+‘,‘‘P‘‘) is not null‘+char(13)+char(9)+‘DROP PROC ‘+quotename(‘d‘[email protected])
+char(10)+‘Go‘+char(13)+char(10)+‘/‘+replicate(‘*‘,160)+char(10)
+‘%%存储过程名:d‘[email protected]+char(10)+char(10)
+‘%%输入参数:‘+char(10)+char(10)
+‘%%输出参数:‘[email protected]+char(10)+char(10)
+‘%%功能:删除记录在表‘[email protected]+char(10)+replicate(‘*‘,160)+char(10)
+‘%%编写:‘[email protected]+char(10)+char(10)+replicate(‘*‘,160)+‘/‘+char(10)
[email protected]+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][email protected]
WHERE [ID][email protected]
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][email protected]
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][email protected]
Go

  

时间: 2024-10-22 03:27:33

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

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

原文:1. SQL Server服务器监控实现方法 对于服务器的监控,和对数据库的监控,很少有合二为一的工具,如果有的话,一般是付费软件,或者自行开发的工具.所以如果不想购买软件,也不想花精力去开发的话,可以结合一些免费/开源的工具.自定义脚本,来完成对数据库服务器的监控. 一. 第三方工具1. 开源工具比如:CACTI,Nagios,Zabbix等等,除了主机外,对于网络上的其他设备,比如路由器等也可以一并监控.以CACTI为例(CACTI可以在windows下安装),服务器监控的图示:(1)

SQL Server 常用命令使用方法

(1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]" sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]" sql="select * from 数据表

SQL Server镜像自动生成脚本

SQL Server镜像自动生成脚本 镜像的搭建非常繁琐,花了一点时间写了这个脚本,方便大家搭建镜像 执行完这个镜像脚本之后,最好在每台机器都绑定一下hosts文件,不然的话,镜像可能会不work 192.168.1.1 WSQL01192.168.1.2 WSQL02192.168.1.3 WWEB03 --★Do部分都是需要填写的 -- ============================================= -- Author: <桦仔> -- Blog: <ht

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

此文为转载文章,描述的很好,没有验证过. 最近遇到了一个看上去很奇怪,分析起来很有意思的死锁问题.这个死锁看上去难以理解.而分析过程中,又使用了很多分析SQL Server死锁的典型方法.记录下来整个分析过程还是很有意义的. 问题重现步骤: 经过提炼,问题重现的步骤非常简单,在SQL 2008上可以很容易地重现. 1.         首先,创建一张表格,上面有一个clustered index,两个non-clustered index. create table tt(id int iden

MyEclipse添加SQL Server 2008数据库的方法

MyEclipse添加SQL Server 2008数据库的方法 一般在配置环境的时候,如果要用到数据库的话,就要把编程工具与数据库连接起来.现在,小编为大家介绍,MyEclipse添加SQL Server 2008数据库的方法,希望对大家有帮助 1.在环境变量中,在classpath下添加sqljdbc.jar的路径(可直接复制sqljdbc.jar到jdk目录下) 2.设置SQLEXPRESS服务器,启动TCP/IP服务(若已开启跳过此步),重启服务器 3.在MyEclipse中,Windo

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

本文实例讲述了C#将图片存放到SQL SERVER数据库中的方法.分享给大家供大家参考.具体如下: 第一步: //获取当前选择的图片 this.pictureBox1.Image = Image.FromStream(this.openFileDialog1.OpenFile()); //获取当前图片的路径 string path = openFileDialog1.FileName.ToString(); //将制定路径的图片添加到FileStream类中 FileStream fs = ne

SQL Server 开发利器 SQL Prompt 6.5 T-SQL智能感知分析器 下载地址 完全破解+使用教程

SQL脚本越写越多,总是觉得编写效率太过于低下,这和打字速度无关.在我个人编写SQL脚本时,至少会把SQL的格式排列成易于阅读的,因为其他人会阅读到你的SQL,无论是在程序中或是脚本文件中,良好的排版不仅让人看起来赏心悦目,在和他人之间做交流时也省时省力,不会因为揉成一团的sql去询问Team Member:您能帮我解释一下这么一大段sql是做什么的吗? 虽然微软至SQL 2008以上的版本提供了SQL智能提示,但是它的反应实在是过于迟钝,等提示出来我们早就可以敲出一行语句了.而且它没有提供sq

数据库 SQL Server 到 MySQL 迁移方法总结

最近接手一起老项目数据库 SQL Server 到 MySQL 的迁移.因此迁移前进行了一些调查和总结.下面是一些 SQL Server 到 MySQL 的迁移方法. 1. 使用 SQLyog 迁移 具体方法可以参加:http://www.cnblogs.com/gaizai/p/3237907.html 优点:该迁移方法很简单,灵活,迁移时,可以进行字段的修改,比如在sql server中原来是datetime,然后迁移到mysql时你可以配置成timestamp: 成功率很高: 缺点:迁移很

SQL SERVER 9003错误解决方法 只适用于SQL2000

SQLSERVER 9003错误解决方法 只适用于SQL2000 (只适用于SQL2000) "无法打开新数据库 'POS'.CREATE DATABASE 中止. (Microsoft SQL Server,错误: 9003)" 看是9003错误,就想到可能是由于日志文件的原因,再看数据库文件可能损坏,于是想到dbcc checkdb指令. 方法如下: 1.我们使用默认方式建立一个供恢复使用的数据库(如pos).可以在SQL Server Enterprise Manager里面建立