SQL <!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->/**//*************自动生成存储过程演示*****************/ /**//*************主要生成以下四个脚本 Delete/Select/Insert/Update*****************/ /**//*************说明:仅用于MSSQL2000/2005/2008*****************/ /**//*************tony2009.06.06Update*****************/ /**//*************MSN:3w@live.cn*****************/ /**//*************自动生成存储过程演示*****************/ /**//************************创建测试数据库[TestProcedure]*******************************/ usemaster go IFEXISTS(SELECTnameFROMmaster.dbo.sysdatabasesWHEREname=N'TestProcedure') DROPDATABASE[TestProcedure] GO createdatabase[TestProcedure] go use[TestProcedure] go
第二步:生成主要存储过程
Code <!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->SETQUOTED_IDENTIFIEROFF GO SETANSI_NULLSON GO /**//*生成一个Delete记录的存储过程************************* tony2009.06.06Update MSN:3w@live.cn @sTableName 表名 @bExecute是否执行 默认0不执行 */ CREATEPROCCPP__SYS_MakeDeleteRecordProc @sTableNamevarchar(128), @bExecutebit=0 AS IFdbo.fnTableHasPrimaryKey(@sTableName)=0 BEGIN RAISERROR('Procedurecannotbecreatedonatablewithnoprimarykey.',10,1) RETURN END DECLARE@sProcTextvarchar(8000), @sKeyFieldsvarchar(2000), @sWhereClausevarchar(2000), @sColumnNamevarchar(128), @nColumnIDsmallint, @bPrimaryKeyColumnbit, @nAlternateTypeint, @nColumnLengthint, @nColumnPrecisionint, @nColumnScaleint, @IsNullablebit, @IsIdentityint, @sTypeNamevarchar(128), @sDefaultValuevarchar(4000), @sCRLFchar(2), @sTABchar(1) SET@sTAB=char(9) SET@sCRLF=char(13)+char(10) SET@sProcText='' SET@sKeyFields='' SET@sWhereClause='' SET@sProcText=@sProcText+'IFEXISTS(SELECT*FROMsysobjectsWHEREname=''AutoGenerateSys__'+@sTableName+'_Delete'')'+@sCRLF SET@sProcText=@sProcText+@sTAB+'DROPPROCAutoGenerateSys__'+@sTableName+'_Delete'+@sCRLF IF@bExecute=0 SET@sProcText=@sProcText+'GO'+@sCRLF SET@sProcText=@sProcText+@sCRLF PRINT@sProcText IF@bExecute=1 EXEC(@sProcText) SET@sProcText='' SET@sProcText=@sProcText+'----------------------------------------------------------------------------'+@sCRLF SET@sProcText=@sProcText+'--Deleteasinglerecordfrom'+@sTableName+@sCRLF SET@sProcText=@sProcText+'----------------------------------------------------------------------------'+@sCRLF SET@sProcText=@sProcText+'CREATEPROCAutoGenerateSys__'+@sTableName+'_Delete'+@sCRLF DECLAREcrKeyFieldscursorfor SELECT* FROMdbo.fnTableColumnInfo(@sTableName) ORDERBY2 OPENcrKeyFields FETCHNEXT FROMcrKeyFields INTO@sColumnName,@nColumnID,@bPrimaryKeyColumn,@nAlternateType, @nColumnLength,@nColumnPrecision,@nColumnScale,@IsNullable, @IsIdentity,@sTypeName,@sDefaultValue WHILE(@@FETCH_STATUS=0) BEGIN IF(@bPrimaryKeyColumn=1) BEGIN IF(@sKeyFields<>'') SET@sKeyFields=@sKeyFields+','+@sCRLF SET@sKeyFields=@sKeyFields+@sTAB+'@'+@sColumnName+''+@sTypeName IF(@nAlternateType=2)--decimal,numeric SET@sKeyFields=@sKeyFields+'('+CAST(@nColumnPrecisionASvarchar(3))+',' +CAST(@nColumnScaleASvarchar(3))+')' ELSEIF(@nAlternateType=1)--characterandbinary SET@sKeyFields=@sKeyFields+'('+CAST(@nColumnLengthASvarchar(4))+')' IF(@sWhereClause='') SET@sWhereClause=@sWhereClause+'WHERE' ELSE SET@sWhereClause=@sWhereClause+'AND' SET@sWhereClause=@sWhereClause+@sTAB+@sColumnName+'=@'+@sColumnName+@sCRLF END FETCHNEXT FROMcrKeyFields INTO@sColumnName,@nColumnID,@bPrimaryKeyColumn,@nAlternateType, @nColumnLength,@nColumnPrecision,@nColumnScale,@IsNullable, @IsIdentity,@sTypeName,@sDefaultValue END CLOSEcrKeyFields DEALLOCATEcrKeyFields SET@sProcText=@sProcText+@sKeyFields+@sCRLF SET@sProcText=@sProcText+'AS'+@sCRLF SET@sProcText=@sProcText+@sCRLF SET@sProcText=@sProcText+'DELETE'+@sTableName+@sCRLF SET@sProcText=@sProcText+@sWhereClause SET@sProcText=@sProcText+@sCRLF IF@bExecute=0 SET@sProcText=@sProcText+'GO'+@sCRLF PRINT@sProcText IF@bExecute=1 EXEC(@sProcText) GO SETQUOTED_IDENTIFIEROFF GO SETANSI_NULLSON GO SETQUOTED_IDENTIFIERON GO SETANSI_NULLSON GO /**//*生成一个Insert记录的存储过程************************* tony2009.06.06Update MSN:3w@live.cn @sTableName 表名 @bExecute是否执行 默认0不执行 */ CREATEPROCCPP__SYS_MakeInsertRecordProc @sTableNamevarchar(128), @bExecutebit=0 AS IFdbo.fnTableHasPrimaryKey(@sTableName)=0 BEGIN RAISERROR('Procedurecannotbecreatedonatablewithnoprimarykey.',10,1) RETURN END DECLARE@sProcTextvarchar(8000), @sKeyFieldsvarchar(2000), @sAllFieldsvarchar(2000), @sAllParamsvarchar(2000), @sWhereClausevarchar(2000), @sColumnNamevarchar(128), @nColumnIDsmallint, @bPrimaryKeyColumnbit, @nAlternateTypeint, @nColumnLengthint, @nColumnPrecisionint, @nColumnScaleint, @IsNullablebit, @IsIdentityint, @HasIdentityint, @sTypeNamevarchar(128), @sDefaultValuevarchar(4000), @sCRLFchar(2), @sTABchar(1) SET@HasIdentity=0 SET@sTAB=char(9) SET@sCRLF=char(13)+char(10) SET@sProcText='' SET@sKeyFields='' SET@sAllFields='' SET@sWhereClause='' SET@sAllParams='' SET@sProcText=@sProcText+'IFEXISTS(SELECT*FROMsysobjectsWHEREname=''AutoGenerateSys__'+@sTableName+'_Insert'')'+@sCRLF SET@sProcText=@sProcText+@sTAB+'DROPPROCAutoGenerateSys__'+@sTableName+'_Insert'+@sCRLF IF@bExecute=0 SET@sProcText=@sProcText+'GO'+@sCRLF SET@sProcText=@sProcText+@sCRLF PRINT@sProcText IF@bExecute=1 EXEC(@sProcText) SET@sProcText='' SET@sProcText=@sProcText+'----------------------------------------------------------------------------'+@sCRLF SET@sProcText=@sProcText+'--Insertasinglerecordinto'+@sTableName+@sCRLF SET@sProcText=@sProcText+'----------------------------------------------------------------------------'+@sCRLF SET@sProcText=@sProcText+'CREATEPROCAutoGenerateSys__'+@sTableName+'_Insert'+@sCRLF DECLAREcrKeyFieldscursorfor SELECT* FROMdbo.fnTableColumnInfo(@sTableName) ORDERBY2 OPENcrKeyFields FETCHNEXT FROMcrKeyFields INTO@sColumnName,@nColumnID,@bPrimaryKeyColumn,@nAlternateType, @nColumnLength,@nColumnPrecision,@nColumnScale,@IsNullable, @IsIdentity,@sTypeName,@sDefaultValue WHILE(@@FETCH_STATUS=0) BEGIN IF(@IsIdentity=0) BEGIN IF(@sKeyFields<>'') SET@sKeyFields=@sKeyFields+','+@sCRLF SET@sKeyFields=@sKeyFields+@sTAB+'@'+@sColumnName+''+@sTypeName IF(@sAllFields<>'') BEGIN SET@sAllParams=@sAllParams+',' SET@sAllFields=@sAllFields+',' END IF(@sTypeName='timestamp') SET@sAllParams=@sAllParams+'NULL' ELSEIF(@sDefaultValueISNOTNULL) SET@sAllParams=@sAllParams+'COALESCE(@'+@sColumnName+','+@sDefaultValue+')' ELSE SET@sAllParams=@sAllParams+'@'+@sColumnName SET@sAllFields=@sAllFields+@sColumnName END ELSE BEGIN SET@HasIdentity=1 END IF(@nAlternateType=2)--decimal,numeric SET@sKeyFields=@sKeyFields+'('+CAST(@nColumnPrecisionASvarchar(3))+',' +CAST(@nColumnScaleASvarchar(3))+')' ELSEIF(@nAlternateType=1)--characterandbinary SET@sKeyFields=@sKeyFields+'('+CAST(@nColumnLengthASvarchar(4))+')' IF(@IsIdentity=0) BEGIN IF(@sDefaultValueISNOTNULL)OR(@IsNullable=1)OR(@sTypeName='timestamp') SET@sKeyFields=@sKeyFields+'=NULL' END FETCHNEXT FROMcrKeyFields INTO@sColumnName,@nColumnID,@bPrimaryKeyColumn,@nAlternateType, @nColumnLength,@nColumnPrecision,@nColumnScale,@IsNullable, @IsIdentity,@sTypeName,@sDefaultValue END CLOSEcrKeyFields DEALLOCATEcrKeyFields SET@sProcText=@sProcText+@sKeyFields+@sCRLF SET@sProcText=@sProcText+'AS'+@sCRLF SET@sProcText=@sProcText+@sCRLF SET@sProcText=@sProcText+'INSERT'+@sTableName+'('+@sAllFields+')'+@sCRLF SET@sProcText=@sProcText+'VALUES('+@sAllParams+')'+@sCRLF SET@sProcText=@sProcText+@sCRLF IF(@HasIdentity=1) BEGIN SET@sProcText=@sProcText+'RETURNSCOPE_IDENTITY()'+@sCRLF SET@sProcText=@sProcText+@sCRLF END IF@bExecute=0 SET@sProcText=@sProcText+'GO'+@sCRLF PRINT@sProcText IF@bExecute=1 EXEC(@sProcText) GO SETQUOTED_IDENTIFIEROFF GO SETANSI_NULLSON GO SETQUOTED_IDENTIFIEROFF GO SETANSI_NULLSON GO /**//*生成一个Select记录的存储过程************************* tony2009.06.06Update MSN:3w@live.cn @sTableName 表名 @bExecute是否执行 默认0不执行 */ CREATEPROCCPP__SYS_MakeSelectRecordProc @sTableNamevarchar(128), @bExecutebit=0 AS IFdbo.fnTableHasPrimaryKey(@sTableName)=0 BEGIN RAISERROR('Procedurecannotbecreatedonatablewithnoprimarykey.',10,1) RETURN END DECLARE@sProcTextvarchar(8000), @sKeyFieldsvarchar(2000), @sSelectClausevarchar(2000), @sWhereClausevarchar(2000), @sColumnNamevarchar(128), @nColumnIDsmallint, @bPrimaryKeyColumnbit, @nAlternateTypeint, @nColumnLengthint, @nColumnPrecisionint, @nColumnScaleint, @IsNullablebit, @IsIdentityint, @sTypeNamevarchar(128), @sDefaultValuevarchar(4000), @sCRLFchar(2), @sTABchar(1) SET@sTAB=char(9) SET@sCRLF=char(13)+char(10) SET@sProcText='' SET@sKeyFields='' SET@sSelectClause='' SET@sWhereClause='' SET@sProcText=@sProcText+'IFEXISTS(SELECT*FROMsysobjectsWHEREname=''AutoGenerateSys__'+@sTableName+'_Select'')'+@sCRLF SET@sProcText=@sProcText+@sTAB+'DROPPROCAutoGenerateSys__'+@sTableName+'_Select'+@sCRLF IF@bExecute=0 SET@sProcText=@sProcText+'GO'+@sCRLF SET@sProcText=@sProcText+@sCRLF PRINT@sProcText IF@bExecute=1 EXEC(@sProcText) SET@sProcText='' SET@sProcText=@sProcText+'----------------------------------------------------------------------------'+@sCRLF SET@sProcText=@sProcText+'--Selectasinglerecordfrom'+@sTableName+@sCRLF SET@sProcText=@sProcText+'----------------------------------------------------------------------------'+@sCRLF SET@sProcText=@sProcText+'CREATEPROCAutoGenerateSys__'+@sTableName+'_Select'+@sCRLF DECLAREcrKeyFieldscursorfor SELECT* FROMdbo.fnTableColumnInfo(@sTableName) ORDERBY2 OPENcrKeyFields FETCHNEXT FROMcrKeyFields INTO@sColumnName,@nColumnID,@bPrimaryKeyColumn,@nAlternateType, @nColumnLength,@nColumnPrecision,@nColumnScale,@IsNullable, @IsIdentity,@sTypeName,@sDefaultValue WHILE(@@FETCH_STATUS=0) BEGIN IF(@bPrimaryKeyColumn=1) BEGIN IF(@sKeyFields<>'') SET@sKeyFields=@sKeyFields+','+@sCRLF SET@sKeyFields=@sKeyFields+@sTAB+'@'+@sColumnName+''+@sTypeName IF(@nAlternateType=2)--decimal,numeric SET@sKeyFields=@sKeyFields+'('+CAST(@nColumnPrecisionASvarchar(3))+',' +CAST(@nColumnScaleASvarchar(3))+')' ELSEIF(@nAlternateType=1)--characterandbinary SET@sKeyFields=@sKeyFields+'('+CAST(@nColumnLengthASvarchar(4))+')' IF(@sWhereClause='') SET@sWhereClause=@sWhereClause+'WHERE' ELSE SET@sWhereClause=@sWhereClause+'AND' SET@sWhereClause=@sWhereClause+@sTAB+@sColumnName+'=@'+@sColumnName+@sCRLF END IF(@sSelectClause='') SET@sSelectClause=@sSelectClause+'SELECT' ELSE SET@sSelectClause=@sSelectClause+','+@sCRLF SET@sSelectClause=@sSelectClause+@sTAB+@sColumnName FETCHNEXT FROMcrKeyFields INTO@sColumnName,@nColumnID,@bPrimaryKeyColumn,@nAlternateType, @nColumnLength,@nColumnPrecision,@nColumnScale,@IsNullable, @IsIdentity,@sTypeName,@sDefaultValue END CLOSEcrKeyFields DEALLOCATEcrKeyFields SET@sSelectClause=@sSelectClause+@sCRLF SET@sProcText=@sProcText+@sKeyFields+@sCRLF SET@sProcText=@sProcText+'AS'+@sCRLF SET@sProcText=@sProcText+@sCRLF SET@sProcText=@sProcText+@sSelectClause SET@sProcText=@sProcText+'FROM'+@sTableName+@sCRLF SET@sProcText=@sProcText+@sWhereClause SET@sProcText=@sProcText+@sCRLF IF@bExecute=0 SET@sProcText=@sProcText+'GO'+@sCRLF PRINT@sProcText IF@bExecute=1 EXEC(@sProcText) GO SETQUOTED_IDENTIFIEROFF GO SETANSI_NULLSON GO SETQUOTED_IDENTIFIERON GO SETANSI_NULLSON GO /**//*生成一个Update记录的存储过程************************* tony2009.06.06Update MSN:3w@live.cn @sTableName 表名 @bExecute是否执行 默认0不执行 */ CREATEPROCCPP__SYS_MakeUpdateRecordProc @sTableNamevarchar(128), @bExecutebit=0 AS IFdbo.fnTableHasPrimaryKey(@sTableName)=0 BEGIN RAISERROR('Procedurecannotbecreatedonatablewithnoprimarykey.',10,1) RETURN END DECLARE@sProcTextvarchar(8000), @sKeyFieldsvarchar(2000), @sSetClausevarchar(2000), @sWhereClausevarchar(2000), @sColumnNamevarchar(128), @nColumnIDsmallint, @bPrimaryKeyColumnbit, @nAlternateTypeint, @nColumnLengthint, @nColumnPrecisionint, @nColumnScaleint, @IsNullablebit, @IsIdentityint, @sTypeNamevarchar(128), @sDefaultValuevarchar(4000), @sCRLFchar(2), @sTABchar(1) SET@sTAB=char(9) SET@sCRLF=char(13)+char(10) SET@sProcText='' SET@sKeyFields='' SET@sSetClause='' SET@sWhereClause='' SET@sProcText=@sProcText+'IFEXISTS(SELECT*FROMsysobjectsWHEREname=''AutoGenerateSys__'+@sTableName+'_Update'')'+@sCRLF SET@sProcText=@sProcText+@sTAB+'DROPPROCAutoGenerateSys__'+@sTableName+'_Update'+@sCRLF IF@bExecute=0 SET@sProcText=@sProcText+'GO'+@sCRLF SET@sProcText=@sProcText+@sCRLF PRINT@sProcText IF@bExecute=1 EXEC(@sProcText) SET@sProcText='' SET@sProcText=@sProcText+'----------------------------------------------------------------------------'+@sCRLF SET@sProcText=@sProcText+'--Updateasinglerecordin'+@sTableName+@sCRLF SET@sProcText=@sProcText+'----------------------------------------------------------------------------'+@sCRLF SET@sProcText=@sProcText+'CREATEPROCAutoGenerateSys__'+@sTableName+'_Update'+@sCRLF DECLAREcrKeyFieldscursorfor SELECT* FROMdbo.fnTableColumnInfo(@sTableName) ORDERBY2 OPENcrKeyFields FETCHNEXT FROMcrKeyFields INTO@sColumnName,@nColumnID,@bPrimaryKeyColumn,@nAlternateType, @nColumnLength,@nColumnPrecision,@nColumnScale,@IsNullable, @IsIdentity,@sTypeName,@sDefaultValue WHILE(@@FETCH_STATUS=0) BEGIN IF(@sKeyFields<>'') SET@sKeyFields=@sKeyFields+','+@sCRLF SET@sKeyFields=@sKeyFields+@sTAB+'@'+@sColumnName+''+@sTypeName IF(@nAlternateType=2)--decimal,numeric SET@sKeyFields=@sKeyFields+'('+CAST(@nColumnPrecisionASvarchar(3))+',' +CAST(@nColumnScaleASvarchar(3))+')' ELSEIF(@nAlternateType=1)--characterandbinary SET@sKeyFields=@sKeyFields+'('+CAST(@nColumnLengthASvarchar(4))+')' IF(@bPrimaryKeyColumn=1) BEGIN IF(@sWhereClause='') SET@sWhereClause=@sWhereClause+'WHERE' ELSE SET@sWhereClause=@sWhereClause+'AND' SET@sWhereClause=@sWhereClause+@sTAB+@sColumnName+'=@'+@sColumnName+@sCRLF END ELSE IF(@IsIdentity=0) BEGIN IF(@sSetClause='') SET@sSetClause=@sSetClause+'SET' ELSE SET@sSetClause=@sSetClause+','+@sCRLF SET@sSetClause=@sSetClause+@sTAB+@sColumnName+'=' IF(@sTypeName='timestamp') SET@sSetClause=@sSetClause+'NULL' ELSEIF(@sDefaultValueISNOTNULL) SET@sSetClause=@sSetClause+'COALESCE(@'+@sColumnName+','+@sDefaultValue+')' ELSE SET@sSetClause=@sSetClause+'@'+@sColumnName END IF(@IsIdentity=0) BEGIN IF(@IsNullable=1)OR(@sTypeName='timestamp') SET@sKeyFields=@sKeyFields+'=NULL' END FETCHNEXT FROMcrKeyFields INTO@sColumnName,@nColumnID,@bPrimaryKeyColumn,@nAlternateType, @nColumnLength,@nColumnPrecision,@nColumnScale,@IsNullable, @IsIdentity,@sTypeName,@sDefaultValue END CLOSEcrKeyFields DEALLOCATEcrKeyFields SET@sSetClause=@sSetClause+@sCRLF SET@sProcText=@sProcText+@sKeyFields+@sCRLF SET@sProcText=@sProcText+'AS'+@sCRLF SET@sProcText=@sProcText+@sCRLF SET@sProcText=@sProcText+'UPDATE'+@sTableName+@sCRLF SET@sProcText=@sProcText+@sSetClause SET@sProcText=@sProcText+@sWhereClause SET@sProcText=@sProcText+@sCRLF IF@bExecute=0 SET@sProcText=@sProcText+'GO'+@sCRLF PRINT@sProcText IF@bExecute=1 EXEC(@sProcText) GO SETQUOTED_IDENTIFIEROFF GO SETANSI_NULLSON GO
第三步:生成一些必须的Function
Code <!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->/**//*生成一些通用的Function************************* tony2009.06.06Update MSN:3w@live.cn @sTableName 表名 @bExecute是否执行 默认0不执行 */ SETQUOTED_IDENTIFIERON GO SETANSI_NULLSON GO CREATEFUNCTIONdbo.fnCleanDefaultValue(@sDefaultValuevarchar(4000)) RETURNSvarchar(4000) AS BEGIN RETURNSubString(@sDefaultValue,2,DataLength(@sDefaultValue)-2) END GO SETQUOTED_IDENTIFIEROFF GO SETANSI_NULLSON GO SETQUOTED_IDENTIFIERON GO SETANSI_NULLSON GO CREATEFUNCTIONdbo.fnColumnDefault(@sTableNamevarchar(128),@sColumnNamevarchar(128)) RETURNSvarchar(4000) AS BEGIN DECLARE@sDefaultValuevarchar(4000) SELECT@sDefaultValue=dbo.fnCleanDefaultValue(COLUMN_DEFAULT) FROMINFORMATION_SCHEMA.COLUMNS WHERETABLE_NAME=@sTableName ANDCOLUMN_NAME=@sColumnName RETURN@sDefaultValue END GO SETQUOTED_IDENTIFIEROFF GO SETANSI_NULLSON GO SETQUOTED_IDENTIFIERON GO SETANSI_NULLSON GO CREATEFUNCTIONdbo.fnIsColumnPrimaryKey(@sTableNamevarchar(128),@nColumnNamevarchar(128)) RETURNSbit AS BEGIN DECLARE@nTableIDint, @nIndexIDint, @iint SET@nTableID=OBJECT_ID(@sTableName) SELECT@nIndexID=indid FROMsysindexes WHEREid=@nTableID ANDindidBETWEEN1And254 AND(status&2048)=2048 IF@nIndexIDIsNull RETURN0 IF@nColumnNameIN (SELECTsc.[name] FROMsysindexkeyssik INNERJOINsyscolumnsscONsik.id=sc.idANDsik.colid=sc.colid WHEREsik.id=@nTableID ANDsik.indid=@nIndexID) BEGIN RETURN1 END RETURN0 END GO SETQUOTED_IDENTIFIEROFF GO SETANSI_NULLSON GO SETQUOTED_IDENTIFIERON GO SETANSI_NULLSON GO CREATEFUNCTIONdbo.fnTableColumnInfo(@sTableNamevarchar(128)) RETURNSTABLE AS RETURN SELECTc.nameASsColumnName, c.colidASnColumnID, dbo.fnIsColumnPrimaryKey(@sTableName,c.name)ASbPrimaryKeyColumn, CASEWHENt.nameIN('char','varchar','binary','varbinary','nchar','nvarchar')THEN1 WHENt.nameIN('decimal','numeric')THEN2 ELSE0 ENDASnAlternateType, c.lengthASnColumnLength, c.precASnColumnPrecision, c.scaleASnColumnScale, c.IsNullable, SIGN(c.status&128)ASIsIdentity, t.nameassTypeName, dbo.fnColumnDefault(@sTableName,c.name)ASsDefaultValue FROMsyscolumnsc INNERJOINsystypestONc.xtype=t.xtypeandc.usertype=t.usertype WHEREc.id=OBJECT_ID(@sTableName) GO SETQUOTED_IDENTIFIEROFF GO SETANSI_NULLSON GO SETQUOTED_IDENTIFIERON GO SETANSI_NULLSON GO CREATEFUNCTIONdbo.fnTableHasPrimaryKey(@sTableNamevarchar(128)) RETURNSbit AS BEGIN DECLARE@nTableIDint, @nIndexIDint SET@nTableID=OBJECT_ID(@sTableName) SELECT@nIndexID=indid FROMsysindexes WHEREid=@nTableID ANDindidBETWEEN1And254 AND(status&2048)=2048 IF@nIndexIDISNOTNull RETURN1 RETURN0 END GO SETQUOTED_IDENTIFIEROFF GO SETANSI_NULLSON GO
第四步:生成测试数据表,并执行
Code <!-- <br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> /**//************************创建测试数据表Product*******************************/ ifnotexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[Product]')andOBJECTPROPERTY(id,N'IsUserTable')=1) BEGIN CREATETABLE[Product]( [P_ID][bigint]NOTNULL, [P_Name][nvarchar](255)COLLATEChinese_PRC_CI_ASNULL, [CategoryID1][int]NULL, [CategoryID2][int]NULL, [CategoryID3][int]NULL, [P_SingleIntro][nvarchar](1000)COLLATEChinese_PRC_CI_ASNULL, [P_Intro][ntext]COLLATEChinese_PRC_CI_ASNULL, [P_Order][float]NULL, [P_TopTime][smalldatetime]NULL, [P_BigImage][nvarchar](150)COLLATEChinese_PRC_CI_ASNULL, [P_SmallImage][nvarchar](150)COLLATEChinese_PRC_CI_ASNULL, [CurState][smallint]NOTNULL, [RecState][smallint]NOTNULL, [P_CheckInfo][nvarchar](80)COLLATEChinese_PRC_CI_ASNULL, [P_L_ID][int]NOTNULL, [P_NewKey1][nvarchar](300)COLLATEChinese_PRC_CI_ASNULL, [AddTime][datetime]NOTNULL, [AddUser][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL, [ModTime][datetime]NOTNULL, [ModUser][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL, [F1][int]NOTNULL, [F3][nvarchar](50)COLLATEChinese_PRC_CI_ASNULL, CONSTRAINT[PK_Product]PRIMARYKEYCLUSTERED ( [P_ID] )ON[PRIMARY] )ON[PRIMARY]TEXTIMAGE_ON[PRIMARY] END /**//********测试生成***********/ --CPP__SYS_MakeDeleteRecordProc'Product',0 --go --CPP__SYS_MakeInsertRecordProc'Product',0 --go --CPP__SYS_MakeSelectRecordProc'Product',0 --go --CPP__SYS_MakeUpdateRecordProc'Product',0 --go /**//********测试生成***********/ CPP__SYS_MakeDeleteRecordProc'Product',1 go CPP__SYS_MakeInsertRecordProc'Product',1 go CPP__SYS_MakeSelectRecordProc'Product',1 go CPP__SYS_MakeUpdateRecordProc'Product',1 go