Createproceduresp_GenInsert
@TableNamevarchar(130),
@ProcedureNamevarchar(130)
as
setnocounton
declare@maxcolint,
@TableIDint
set@TableID=object_id(@TableName)
select@MaxCol=max(colorder)
fromsyscolumns
whereid=@TableID
selectCreateProcedure+rtrim(@ProcedureName)astype,0ascolorderinto#TempProc
union
selectconvert(char(35),@+syscolumns.name)
+rtrim(systypes.name)
+casewhenrtrim(systypes.name)in(binary,char,nchar,nvarchar,varbinary,varchar)then(+rtrim(convert(char(4),syscolumns.length))+)
whenrtrim(systypes.name)notin(binary,char,nchar,nvarchar,varbinary,varchar)then
end
+casewhencolorder<@maxcolthen,
whencolorder=@maxcolthen
end
astype,
colorder
fromsyscolumns
joinsystypesonsyscolumns.xtype=systypes.xtype
whereid=@TableIDandsystypes.namesysname
union
selectAS,@maxcol+1ascolorder
union
selectINSERTINTO+@TableName,@maxcol+2ascolorder
union
select(,@maxcol+3ascolorder
union
selectsyscolumns.name
+casewhencolorder<@maxcolthen,
whencolorder=@maxcolthen
end
astype,
colorder+@maxcol+3ascolorder
fromsyscolumns
joinsystypesonsyscolumns.xtype=systypes.xtype
whereid=@TableIDandsystypes.namesysname
union
select),(2*@maxcol)+4ascolorder
union
selectVALUES,(2*@maxcol)+5ascolorder
union
select(,(2*@maxcol)+6ascolorder
union
select@+syscolumns.name
+casewhencolorder<@maxcolthen,
whencolorder=@maxcolthen
end
astype,
colorder+(2*@maxcol+6)ascolorder
fromsyscolumns
joinsystypesonsyscolumns.xtype=systypes.xtype
whereid=@TableIDandsystypes.namesysname
union
select),(3*@maxcol)+7ascolorder
orderbycolorder
selecttypefrom#tempprocorderbycolorder
更新:
Createproceduresp_GenUpdate
@TableNamevarchar(130),
@PrimaryKeyvarchar(130),
@ProcedureNamevarchar(130)
as
setnocounton
declare@maxcolint,
@TableIDint
set@TableID=object_id(@TableName)
select@MaxCol=max(colorder)
fromsyscolumns
whereid=@TableID
selectCreateProcedure+rtrim(@ProcedureName)astype,0ascolorderinto#TempProc
union
selectconvert(char(35),@+syscolumns.name)
+rtrim(systypes.name)
+casewhenrtrim(systypes.name)in(binary,char,nchar,nvarchar,varbinary,varchar)then(+rtrim(convert(char(4),syscolumns.length))+)
whenrtrim(systypes.name)notin(binary,char,nchar,nvarchar,varbinary,varchar)then
end
+casewhencolorder<@maxcolthen,
whencolorder=@maxcolthen
end
astype,
colorder
fromsyscolumns
joinsystypesonsyscolumns.xtype=systypes.xtype
whereid=@TableIDandsystypes.namesysname
union
selectAS,@maxcol+1ascolorder
union
selectUPDATE+@TableName,@maxcol+2ascolorder
union
selectSET,@maxcol+3ascolorder
union
selectsyscolumns.name+=@+syscolumns.name
+casewhencolorder<@maxcolthen,
whencolorder=@maxcolthen
end
astype,
colorder+@maxcol+3ascolorder
fromsyscolumns
joinsystypesonsyscolumns.xtype=systypes.xtype
whereid=@TableIDandsyscolumns.name@PrimaryKeyandsystypes.namesysname
union
selectWHERE+@PrimaryKey+=@+@PrimaryKey,(2*@maxcol)+4ascolorder
orderbycolorder
selecttypefrom#tempprocorderbycolorder
droptable#tempproc