日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server开发接口生成方法

發布時間:2023/11/29 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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开发接口生成方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。