根据表名自动生成I/S/U/D的SQL语句,用于MSSQL2000/2005/2008

网上流传的基本SQL生成语句(Inset/Selec/Update/Delete)方法多了,这里介绍一种,可以用于MSSQL 2000/2005/2008。

 第一步:生成测试数据库

ContractedBlock.gif ExpandedBlockStart.gif SQL
ExpandedBlockStart.gifContractedBlock.gif/**//*************自动生成存储过程演示   *****************/
ExpandedBlockStart.gifContractedBlock.gif
/**//*************主要生成以下四个脚本 Delete/Select/Insert/Update  *****************/
ExpandedBlockStart.gifContractedBlock.gif
/**//*************说明:仅用于MSSQL 2000/2005/2008  *****************/
ExpandedBlockStart.gifContractedBlock.gif
/**//*************tony 2009.06.06  Update *****************/
ExpandedBlockStart.gifContractedBlock.gif
/**//*************MSN:3w@live.cn  *****************/
ExpandedBlockStart.gifContractedBlock.gif
/**//*************自动生成存储过程演示   *****************/
None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**//************************创建测试数据库[TestProcedure]*******************************/
None.gif
use master
None.gif
go
None.gif
None.gif
IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'TestProcedure')
None.gif    
DROP DATABASE [TestProcedure]
None.gif
GO
None.gif
None.gif
create database [TestProcedure]
None.gif
go
None.gif
None.gif
use [TestProcedure]
None.gif
go
None.gif
None.gif

 第二步:生成主要存储过程

ContractedBlock.gif ExpandedBlockStart.gif Code
None.gifSET QUOTED_IDENTIFIER OFF 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**//*生成一个Delete记录的存储过程*************************
InBlock.giftony 2009.06.06  Update
InBlock.gifMSN:3w@live.cn
InBlock.gif@sTableName 表名
InBlock.gif@bExecute 是否执行 默认0不执行
ExpandedBlockEnd.gif
*/

None.gif
CREATE      PROC CPP__SYS_MakeDeleteRecordProc
None.gif    
@sTableName varchar(128),
None.gif    
@bExecute bit = 0
None.gif
AS
None.gif
None.gif
IF dbo.fnTableHasPrimaryKey(@sTableName= 0
None.gif 
BEGIN
None.gif    
RAISERROR ('Procedure cannot be created on a table with no primary key.'101)
None.gif    
RETURN
None.gif 
END
None.gif
None.gif
DECLARE    @sProcText varchar(8000),
None.gif    
@sKeyFields varchar(2000),
None.gif    
@sWhereClause varchar(2000),
None.gif    
@sColumnName varchar(128),
None.gif    
@nColumnID smallint,
None.gif    
@bPrimaryKeyColumn bit,
None.gif    
@nAlternateType int,
None.gif    
@nColumnLength int,
None.gif    
@nColumnPrecision int,
None.gif    
@nColumnScale int,
None.gif    
@IsNullable bit
None.gif    
@IsIdentity int,
None.gif    
@sTypeName varchar(128),
None.gif    
@sDefaultValue varchar(4000),
None.gif    
@sCRLF char(2),
None.gif    
@sTAB char(1)
None.gif
None.gif
SET    @sTAB = char(9)
None.gif
SET     @sCRLF = char(13+ char(10)
None.gif
None.gif
SET     @sProcText = ''
None.gif
SET     @sKeyFields = ''
None.gif
SET    @sWhereClause = ''
None.gif
None.gif
SET     @sProcText = @sProcText + 'IF EXISTS(SELECT * FROM sysobjects WHERE name = ''AutoGenerateSys__' + @sTableName + '_Delete'')' + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sTAB + 'DROP PROC AutoGenerateSys__' + @sTableName + '_Delete' + @sCRLF
None.gif
IF @bExecute = 0
None.gif    
SET     @sProcText = @sProcText + 'GO' + @sCRLF
None.gif
None.gif
SET     @sProcText = @sProcText + @sCRLF
None.gif
None.gif
PRINT @sProcText
None.gif
None.gif
IF @bExecute = 1 
None.gif    
EXEC (@sProcText)
None.gif
None.gif
SET     @sProcText = ''
None.gif
SET     @sProcText = @sProcText + '----------------------------------------------------------------------------' + @sCRLF
None.gif
SET     @sProcText = @sProcText + '-- Delete a single record from ' + @sTableName + @sCRLF
None.gif
SET     @sProcText = @sProcText + '----------------------------------------------------------------------------' + @sCRLF
None.gif
SET     @sProcText = @sProcText + 'CREATE PROC AutoGenerateSys__' + @sTableName + '_Delete' + @sCRLF
None.gif
None.gif
DECLARE crKeyFields cursor for
None.gif    
SELECT    *
None.gif    
FROM    dbo.fnTableColumnInfo(@sTableName)
None.gif    
ORDER BY 2
None.gif
None.gif
OPEN crKeyFields
None.gif
None.gif
FETCH     NEXT 
None.gif
FROM     crKeyFields 
None.gif
INTO     @sColumnName@nColumnID@bPrimaryKeyColumn@nAlternateType
None.gif    
@nColumnLength@nColumnPrecision@nColumnScale@IsNullable
None.gif    
@IsIdentity@sTypeName@sDefaultValue
None.gif                
None.gif
WHILE (@@FETCH_STATUS = 0)
None.gif 
BEGIN
None.gif
None.gif    
IF (@bPrimaryKeyColumn = 1)
None.gif     
BEGIN
None.gif        
IF (@sKeyFields <> '')
None.gif            
SET @sKeyFields = @sKeyFields + ',' + @sCRLF 
None.gif    
None.gif        
SET @sKeyFields = @sKeyFields + @sTAB + '@' + @sColumnName + ' ' + @sTypeName
None.gif
None.gif        
IF (@nAlternateType = 2--decimal, numeric
None.gif
            SET @sKeyFields =  @sKeyFields + '(' + CAST(@nColumnPrecision AS varchar(3)) + '' 
None.gif                    
+ CAST(@nColumnScale AS varchar(3)) + ')'
None.gif    
None.gif        
ELSE IF (@nAlternateType = 1--character and binary
None.gif
            SET @sKeyFields =  @sKeyFields + '(' + CAST(@nColumnLength AS varchar(4)) +  ')'
None.gif    
None.gif        
IF (@sWhereClause = '')
None.gif            
SET @sWhereClause = @sWhereClause + 'WHERE ' 
None.gif        
ELSE
None.gif            
SET @sWhereClause = @sWhereClause + ' AND ' 
None.gif
None.gif        
SET @sWhereClause = @sWhereClause + @sTAB + @sColumnName  + ' = @' + @sColumnName + @sCRLF 
None.gif     
END
None.gif
None.gif    
FETCH     NEXT 
None.gif    
FROM     crKeyFields 
None.gif    
INTO     @sColumnName@nColumnID@bPrimaryKeyColumn@nAlternateType
None.gif        
@nColumnLength@nColumnPrecision@nColumnScale@IsNullable
None.gif        
@IsIdentity@sTypeName@sDefaultValue
None.gif 
END
None.gif
None.gif
CLOSE crKeyFields
None.gif
DEALLOCATE crKeyFields
None.gif
None.gif
SET     @sProcText = @sProcText + @sKeyFields + @sCRLF
None.gif
SET     @sProcText = @sProcText + 'AS' + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sCRLF
None.gif
SET     @sProcText = @sProcText + 'DELETE    ' + @sTableName + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sWhereClause
None.gif
SET     @sProcText = @sProcText + @sCRLF
None.gif
IF @bExecute = 0
None.gif    
SET     @sProcText = @sProcText + 'GO' + @sCRLF
None.gif
None.gif
None.gif
PRINT @sProcText
None.gif
None.gif
IF @bExecute = 1 
None.gif    
EXEC (@sProcText)
None.gif
None.gif
None.gif
GO
None.gif
SET QUOTED_IDENTIFIER OFF 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
SET QUOTED_IDENTIFIER ON 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**//*生成一个Insert记录的存储过程*************************
InBlock.giftony 2009.06.06  Update
InBlock.gifMSN:3w@live.cn
InBlock.gif@sTableName 表名
InBlock.gif@bExecute 是否执行 默认0不执行
ExpandedBlockEnd.gif
*/

None.gif
None.gif
CREATE       PROC CPP__SYS_MakeInsertRecordProc
None.gif    
@sTableName varchar(128),
None.gif    
@bExecute bit = 0
None.gif
AS
None.gif
None.gif
IF dbo.fnTableHasPrimaryKey(@sTableName= 0
None.gif 
BEGIN
None.gif    
RAISERROR ('Procedure cannot be created on a table with no primary key.'101)
None.gif    
RETURN
None.gif 
END
None.gif
None.gif
DECLARE    @sProcText varchar(8000),
None.gif    
@sKeyFields varchar(2000),
None.gif    
@sAllFields varchar(2000),
None.gif    
@sAllParams varchar(2000),
None.gif    
@sWhereClause varchar(2000),
None.gif    
@sColumnName varchar(128),
None.gif    
@nColumnID smallint,
None.gif    
@bPrimaryKeyColumn bit,
None.gif    
@nAlternateType int,
None.gif    
@nColumnLength int,
None.gif    
@nColumnPrecision int,
None.gif    
@nColumnScale int,
None.gif    
@IsNullable bit
None.gif    
@IsIdentity int,
None.gif    
@HasIdentity int,
None.gif    
@sTypeName varchar(128),
None.gif    
@sDefaultValue varchar(4000),
None.gif    
@sCRLF char(2),
None.gif    
@sTAB char(1)
None.gif
None.gif
SET     @HasIdentity = 0
None.gif
SET    @sTAB = char(9)
None.gif
SET     @sCRLF = char(13+ char(10)
None.gif
SET     @sProcText = ''
None.gif
SET     @sKeyFields = ''
None.gif
SET    @sAllFields = ''
None.gif
SET    @sWhereClause = ''
None.gif
SET    @sAllParams  = ''
None.gif
None.gif
SET     @sProcText = @sProcText + 'IF EXISTS(SELECT * FROM sysobjects WHERE name = ''AutoGenerateSys__' + @sTableName + '_Insert'')' + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sTAB + 'DROP PROC AutoGenerateSys__' + @sTableName + '_Insert' + @sCRLF
None.gif
IF @bExecute = 0
None.gif    
SET     @sProcText = @sProcText + 'GO' + @sCRLF
None.gif
None.gif
SET     @sProcText = @sProcText + @sCRLF
None.gif
None.gif
PRINT @sProcText
None.gif
None.gif
IF @bExecute = 1 
None.gif    
EXEC (@sProcText)
None.gif
None.gif
SET     @sProcText = ''
None.gif
SET     @sProcText = @sProcText + '----------------------------------------------------------------------------' + @sCRLF
None.gif
SET     @sProcText = @sProcText + '-- Insert a single record into ' + @sTableName + @sCRLF
None.gif
SET     @sProcText = @sProcText + '----------------------------------------------------------------------------' + @sCRLF
None.gif
SET     @sProcText = @sProcText + 'CREATE PROC AutoGenerateSys__' + @sTableName + '_Insert' + @sCRLF
None.gif
None.gif
DECLARE crKeyFields cursor for
None.gif    
SELECT    *
None.gif    
FROM    dbo.fnTableColumnInfo(@sTableName)
None.gif    
ORDER BY 2
None.gif
None.gif
OPEN crKeyFields
None.gif
None.gif
None.gif
FETCH     NEXT 
None.gif
FROM     crKeyFields 
None.gif
INTO     @sColumnName@nColumnID@bPrimaryKeyColumn@nAlternateType
None.gif    
@nColumnLength@nColumnPrecision@nColumnScale@IsNullable
None.gif    
@IsIdentity@sTypeName@sDefaultValue
None.gif                
None.gif
WHILE (@@FETCH_STATUS = 0)
None.gif 
BEGIN
None.gif    
IF (@IsIdentity = 0)
None.gif     
BEGIN
None.gif        
IF (@sKeyFields <> '')
None.gif            
SET @sKeyFields = @sKeyFields + ',' + @sCRLF 
None.gif
None.gif        
SET @sKeyFields = @sKeyFields + @sTAB + '@' + @sColumnName + ' ' + @sTypeName
None.gif
None.gif        
IF (@sAllFields <> '')
None.gif         
BEGIN
None.gif            
SET @sAllParams = @sAllParams + ''
None.gif            
SET @sAllFields = @sAllFields + ''
None.gif         
END
None.gif
None.gif        
IF (@sTypeName = 'timestamp')
None.gif            
SET @sAllParams = @sAllParams + 'NULL'
None.gif        
ELSE IF (@sDefaultValue IS NOT NULL)
None.gif            
SET @sAllParams = @sAllParams + 'COALESCE(@' + @sColumnName + '' + @sDefaultValue + ')'
None.gif        
ELSE
None.gif            
SET @sAllParams = @sAllParams + '@' + @sColumnName 
None.gif
None.gif        
SET @sAllFields = @sAllFields + @sColumnName 
None.gif
None.gif     
END
None.gif    
ELSE
None.gif     
BEGIN
None.gif        
SET @HasIdentity = 1
None.gif     
END
None.gif
None.gif    
IF (@nAlternateType = 2--decimal, numeric
None.gif
        SET @sKeyFields =  @sKeyFields + '(' + CAST(@nColumnPrecision AS varchar(3)) + '' 
None.gif                
+ CAST(@nColumnScale AS varchar(3)) + ')'
None.gif
None.gif    
ELSE IF (@nAlternateType = 1--character and binary
None.gif
        SET @sKeyFields =  @sKeyFields + '(' + CAST(@nColumnLength AS varchar(4)) +  ')'
None.gif
None.gif    
IF (@IsIdentity = 0)
None.gif     
BEGIN
None.gif        
IF (@sDefaultValue IS NOT NULLOR (@IsNullable = 1OR (@sTypeName = 'timestamp')
None.gif            
SET @sKeyFields = @sKeyFields + ' = NULL'
None.gif     
END
None.gif
None.gif    
FETCH     NEXT 
None.gif    
FROM     crKeyFields 
None.gif    
INTO     @sColumnName@nColumnID@bPrimaryKeyColumn@nAlternateType
None.gif        
@nColumnLength@nColumnPrecision@nColumnScale@IsNullable
None.gif        
@IsIdentity@sTypeName@sDefaultValue
None.gif 
END
None.gif
None.gif
CLOSE crKeyFields
None.gif
DEALLOCATE crKeyFields
None.gif
None.gif
SET     @sProcText = @sProcText + @sKeyFields + @sCRLF
None.gif
SET     @sProcText = @sProcText + 'AS' + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sCRLF
None.gif
SET     @sProcText = @sProcText + 'INSERT ' + @sTableName + '(' + @sAllFields + ')' + @sCRLF
None.gif
SET     @sProcText = @sProcText + 'VALUES (' + @sAllParams + ')' + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sCRLF
None.gif
None.gif
IF (@HasIdentity = 1)
None.gif 
BEGIN
None.gif    
SET     @sProcText = @sProcText + 'RETURN SCOPE_IDENTITY()' + @sCRLF
None.gif    
SET     @sProcText = @sProcText + @sCRLF
None.gif 
END
None.gif
None.gif
IF @bExecute = 0
None.gif    
SET     @sProcText = @sProcText + 'GO' + @sCRLF
None.gif
None.gif
None.gif
PRINT @sProcText
None.gif
None.gif
IF @bExecute = 1 
None.gif    
EXEC (@sProcText)
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
GO
None.gif
SET QUOTED_IDENTIFIER OFF 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
SET QUOTED_IDENTIFIER OFF 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**//*生成一个Select记录的存储过程*************************
InBlock.giftony 2009.06.06  Update
InBlock.gifMSN:3w@live.cn
InBlock.gif@sTableName 表名
InBlock.gif@bExecute 是否执行 默认0不执行
ExpandedBlockEnd.gif
*/

None.gif
CREATE     PROC CPP__SYS_MakeSelectRecordProc
None.gif    
@sTableName varchar(128),
None.gif    
@bExecute bit = 0
None.gif
AS
None.gif
None.gif
IF dbo.fnTableHasPrimaryKey(@sTableName= 0
None.gif 
BEGIN
None.gif    
RAISERROR ('Procedure cannot be created on a table with no primary key.'101)
None.gif    
RETURN
None.gif 
END
None.gif
None.gif
DECLARE    @sProcText varchar(8000),
None.gif    
@sKeyFields varchar(2000),
None.gif    
@sSelectClause varchar(2000),
None.gif    
@sWhereClause varchar(2000),
None.gif    
@sColumnName varchar(128),
None.gif    
@nColumnID smallint,
None.gif    
@bPrimaryKeyColumn bit,
None.gif    
@nAlternateType int,
None.gif    
@nColumnLength int,
None.gif    
@nColumnPrecision int,
None.gif    
@nColumnScale int,
None.gif    
@IsNullable bit
None.gif    
@IsIdentity int,
None.gif    
@sTypeName varchar(128),
None.gif    
@sDefaultValue varchar(4000),
None.gif    
@sCRLF char(2),
None.gif    
@sTAB char(1)
None.gif
None.gif
SET    @sTAB = char(9)
None.gif
SET     @sCRLF = char(13+ char(10)
None.gif
None.gif
SET     @sProcText = ''
None.gif
SET     @sKeyFields = ''
None.gif
SET    @sSelectClause = ''
None.gif
SET    @sWhereClause = ''
None.gif
None.gif
SET     @sProcText = @sProcText + 'IF EXISTS(SELECT * FROM sysobjects WHERE name = ''AutoGenerateSys__' + @sTableName + '_Select'')' + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sTAB + 'DROP PROC AutoGenerateSys__' + @sTableName + '_Select' + @sCRLF
None.gif
IF @bExecute = 0
None.gif    
SET     @sProcText = @sProcText + 'GO' + @sCRLF
None.gif
None.gif
SET     @sProcText = @sProcText + @sCRLF
None.gif
None.gif
PRINT @sProcText
None.gif
None.gif
IF @bExecute = 1 
None.gif    
EXEC (@sProcText)
None.gif
None.gif
SET     @sProcText = ''
None.gif
SET     @sProcText = @sProcText + '----------------------------------------------------------------------------' + @sCRLF
None.gif
SET     @sProcText = @sProcText + '-- Select a single record from ' + @sTableName + @sCRLF
None.gif
SET     @sProcText = @sProcText + '----------------------------------------------------------------------------' + @sCRLF
None.gif
SET     @sProcText = @sProcText + 'CREATE PROC AutoGenerateSys__' + @sTableName + '_Select' + @sCRLF
None.gif
None.gif
DECLARE crKeyFields cursor for
None.gif    
SELECT    *
None.gif    
FROM    dbo.fnTableColumnInfo(@sTableName)
None.gif    
ORDER BY 2
None.gif
None.gif
OPEN crKeyFields
None.gif
None.gif
FETCH     NEXT 
None.gif
FROM     crKeyFields 
None.gif
INTO     @sColumnName@nColumnID@bPrimaryKeyColumn@nAlternateType
None.gif    
@nColumnLength@nColumnPrecision@nColumnScale@IsNullable
None.gif    
@IsIdentity@sTypeName@sDefaultValue
None.gif                
None.gif
WHILE (@@FETCH_STATUS = 0)
None.gif 
BEGIN
None.gif    
IF (@bPrimaryKeyColumn = 1)
None.gif     
BEGIN
None.gif        
IF (@sKeyFields <> '')
None.gif            
SET @sKeyFields = @sKeyFields + ',' + @sCRLF 
None.gif    
None.gif        
SET @sKeyFields = @sKeyFields + @sTAB + '@' + @sColumnName + ' ' + @sTypeName
None.gif    
None.gif        
IF (@nAlternateType = 2--decimal, numeric
None.gif
            SET @sKeyFields =  @sKeyFields + '(' + CAST(@nColumnPrecision AS varchar(3)) + '' 
None.gif                    
+ CAST(@nColumnScale AS varchar(3)) + ')'
None.gif    
None.gif        
ELSE IF (@nAlternateType = 1--character and binary
None.gif
            SET @sKeyFields =  @sKeyFields + '(' + CAST(@nColumnLength AS varchar(4)) +  ')'
None.gif
None.gif        
IF (@sWhereClause = '')
None.gif            
SET @sWhereClause = @sWhereClause + 'WHERE ' 
None.gif        
ELSE
None.gif            
SET @sWhereClause = @sWhereClause + ' AND ' 
None.gif
None.gif        
SET @sWhereClause = @sWhereClause + @sTAB + @sColumnName  + ' = @' + @sColumnName + @sCRLF 
None.gif     
END
None.gif
None.gif    
IF (@sSelectClause = '')
None.gif        
SET @sSelectClause = @sSelectClause + 'SELECT'
None.gif    
ELSE
None.gif        
SET @sSelectClause = @sSelectClause + ',' + @sCRLF 
None.gif
None.gif    
SET @sSelectClause = @sSelectClause + @sTAB + @sColumnName 
None.gif
None.gif    
FETCH     NEXT 
None.gif    
FROM     crKeyFields 
None.gif    
INTO     @sColumnName@nColumnID@bPrimaryKeyColumn@nAlternateType
None.gif        
@nColumnLength@nColumnPrecision@nColumnScale@IsNullable
None.gif        
@IsIdentity@sTypeName@sDefaultValue
None.gif 
END
None.gif
None.gif
CLOSE crKeyFields
None.gif
DEALLOCATE crKeyFields
None.gif
None.gif
SET     @sSelectClause = @sSelectClause + @sCRLF
None.gif
None.gif
SET     @sProcText = @sProcText + @sKeyFields + @sCRLF
None.gif
SET     @sProcText = @sProcText + 'AS' + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sSelectClause
None.gif
SET     @sProcText = @sProcText + 'FROM    ' + @sTableName + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sWhereClause
None.gif
SET     @sProcText = @sProcText + @sCRLF
None.gif
IF @bExecute = 0
None.gif    
SET     @sProcText = @sProcText + 'GO' + @sCRLF
None.gif
None.gif
None.gif
PRINT @sProcText
None.gif
None.gif
IF @bExecute = 1 
None.gif    
EXEC (@sProcText)
None.gif
None.gif
None.gif
GO
None.gif
SET QUOTED_IDENTIFIER OFF 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
SET QUOTED_IDENTIFIER ON 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**//*生成一个Update记录的存储过程*************************
InBlock.giftony 2009.06.06  Update
InBlock.gifMSN:3w@live.cn
InBlock.gif@sTableName 表名
InBlock.gif@bExecute 是否执行 默认0不执行
ExpandedBlockEnd.gif
*/

None.gif
CREATE         PROC CPP__SYS_MakeUpdateRecordProc
None.gif    
@sTableName varchar(128),
None.gif    
@bExecute bit = 0
None.gif
AS
None.gif
None.gif
IF dbo.fnTableHasPrimaryKey(@sTableName= 0
None.gif 
BEGIN
None.gif    
RAISERROR ('Procedure cannot be created on a table with no primary key.'101)
None.gif    
RETURN
None.gif 
END
None.gif
None.gif
DECLARE    @sProcText varchar(8000),
None.gif    
@sKeyFields varchar(2000),
None.gif    
@sSetClause varchar(2000),
None.gif    
@sWhereClause varchar(2000),
None.gif    
@sColumnName varchar(128),
None.gif    
@nColumnID smallint,
None.gif    
@bPrimaryKeyColumn bit,
None.gif    
@nAlternateType int,
None.gif    
@nColumnLength int,
None.gif    
@nColumnPrecision int,
None.gif    
@nColumnScale int,
None.gif    
@IsNullable bit
None.gif    
@IsIdentity int,
None.gif    
@sTypeName varchar(128),
None.gif    
@sDefaultValue varchar(4000),
None.gif    
@sCRLF char(2),
None.gif    
@sTAB char(1)
None.gif
None.gif
SET    @sTAB = char(9)
None.gif
SET     @sCRLF = char(13+ char(10)
None.gif
None.gif
SET     @sProcText = ''
None.gif
SET     @sKeyFields = ''
None.gif
SET    @sSetClause = ''
None.gif
SET    @sWhereClause = ''
None.gif
None.gif
SET     @sProcText = @sProcText + 'IF EXISTS(SELECT * FROM sysobjects WHERE name = ''AutoGenerateSys__' + @sTableName + '_Update'')' + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sTAB + 'DROP PROC AutoGenerateSys__' + @sTableName + '_Update' + @sCRLF
None.gif
IF @bExecute = 0
None.gif    
SET     @sProcText = @sProcText + 'GO' + @sCRLF
None.gif
None.gif
SET     @sProcText = @sProcText + @sCRLF
None.gif
None.gif
PRINT @sProcText
None.gif
None.gif
IF @bExecute = 1 
None.gif    
EXEC (@sProcText)
None.gif
None.gif
SET     @sProcText = ''
None.gif
SET     @sProcText = @sProcText + '----------------------------------------------------------------------------' + @sCRLF
None.gif
SET     @sProcText = @sProcText + '-- Update a single record in ' + @sTableName + @sCRLF
None.gif
SET     @sProcText = @sProcText + '----------------------------------------------------------------------------' + @sCRLF
None.gif
SET     @sProcText = @sProcText + 'CREATE PROC AutoGenerateSys__' + @sTableName + '_Update' + @sCRLF
None.gif
None.gif
DECLARE crKeyFields cursor for
None.gif    
SELECT    *
None.gif    
FROM    dbo.fnTableColumnInfo(@sTableName)
None.gif    
ORDER BY 2
None.gif
None.gif
OPEN crKeyFields
None.gif
None.gif
None.gif
FETCH     NEXT 
None.gif
FROM     crKeyFields 
None.gif
INTO     @sColumnName@nColumnID@bPrimaryKeyColumn@nAlternateType
None.gif    
@nColumnLength@nColumnPrecision@nColumnScale@IsNullable
None.gif    
@IsIdentity@sTypeName@sDefaultValue
None.gif                
None.gif
WHILE (@@FETCH_STATUS = 0)
None.gif 
BEGIN
None.gif    
IF (@sKeyFields <> '')
None.gif        
SET @sKeyFields = @sKeyFields + ',' + @sCRLF 
None.gif
None.gif    
SET @sKeyFields = @sKeyFields + @sTAB + '@' + @sColumnName + ' ' + @sTypeName
None.gif
None.gif    
IF (@nAlternateType = 2--decimal, numeric
None.gif
        SET @sKeyFields =  @sKeyFields + '(' + CAST(@nColumnPrecision AS varchar(3)) + '' 
None.gif                
+ CAST(@nColumnScale AS varchar(3)) + ')'
None.gif
None.gif    
ELSE IF (@nAlternateType = 1--character and binary
None.gif
        SET @sKeyFields =  @sKeyFields + '(' + CAST(@nColumnLength AS varchar(4)) +  ')'
None.gif
None.gif    
IF (@bPrimaryKeyColumn = 1)
None.gif     
BEGIN
None.gif        
IF (@sWhereClause = '')
None.gif            
SET @sWhereClause = @sWhereClause + 'WHERE ' 
None.gif        
ELSE
None.gif            
SET @sWhereClause = @sWhereClause + ' AND ' 
None.gif
None.gif        
SET @sWhereClause = @sWhereClause + @sTAB + @sColumnName  + ' = @' + @sColumnName + @sCRLF 
None.gif     
END
None.gif    
ELSE
None.gif        
IF (@IsIdentity = 0)
None.gif         
BEGIN
None.gif            
IF (@sSetClause = '')
None.gif                
SET @sSetClause = @sSetClause + 'SET'
None.gif            
ELSE
None.gif                
SET @sSetClause = @sSetClause + ',' + @sCRLF 
None.gif            
SET @sSetClause = @sSetClause + @sTAB + @sColumnName  + ' = '
None.gif            
IF (@sTypeName = 'timestamp')
None.gif                
SET @sSetClause = @sSetClause + 'NULL'
None.gif            
ELSE IF (@sDefaultValue IS NOT NULL)
None.gif                
SET @sSetClause = @sSetClause + 'COALESCE(@' + @sColumnName + '' + @sDefaultValue + ')'
None.gif            
ELSE
None.gif                
SET @sSetClause = @sSetClause + '@' + @sColumnName 
None.gif         
END
None.gif
None.gif    
IF (@IsIdentity = 0)
None.gif     
BEGIN
None.gif        
IF (@IsNullable = 1OR (@sTypeName = 'timestamp')
None.gif            
SET @sKeyFields = @sKeyFields + ' = NULL'
None.gif     
END
None.gif
None.gif    
FETCH     NEXT 
None.gif    
FROM     crKeyFields 
None.gif    
INTO     @sColumnName@nColumnID@bPrimaryKeyColumn@nAlternateType
None.gif        
@nColumnLength@nColumnPrecision@nColumnScale@IsNullable
None.gif        
@IsIdentity@sTypeName@sDefaultValue
None.gif 
END
None.gif
None.gif
CLOSE crKeyFields
None.gif
DEALLOCATE crKeyFields
None.gif
None.gif
SET     @sSetClause = @sSetClause + @sCRLF
None.gif
None.gif
SET     @sProcText = @sProcText + @sKeyFields + @sCRLF
None.gif
SET     @sProcText = @sProcText + 'AS' + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sCRLF
None.gif
SET     @sProcText = @sProcText + 'UPDATE    ' + @sTableName + @sCRLF
None.gif
SET     @sProcText = @sProcText + @sSetClause
None.gif
SET     @sProcText = @sProcText + @sWhereClause
None.gif
SET     @sProcText = @sProcText + @sCRLF
None.gif
IF @bExecute = 0
None.gif    
SET     @sProcText = @sProcText + 'GO' + @sCRLF
None.gif
None.gif
None.gif
PRINT @sProcText
None.gif
None.gif
IF @bExecute = 1 
None.gif    
EXEC (@sProcText)
None.gif
None.gif
None.gif
None.gif
GO
None.gif
SET QUOTED_IDENTIFIER OFF 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif

 第三步:生成一些必须的Function

ContractedBlock.gif ExpandedBlockStart.gif Code
ExpandedBlockStart.gifContractedBlock.gif/**//*生成一些通用的Function *************************
InBlock.giftony 2009.06.06  Update
InBlock.gifMSN:3w@live.cn
InBlock.gif@sTableName 表名
InBlock.gif@bExecute 是否执行 默认0不执行
ExpandedBlockEnd.gif
*/

None.gif
SET QUOTED_IDENTIFIER ON 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
CREATE FUNCTION dbo.fnCleanDefaultValue(@sDefaultValue varchar(4000))
None.gif
RETURNS varchar(4000)
None.gif
AS
None.gif
BEGIN
None.gif    
RETURN SubString(@sDefaultValue2DataLength(@sDefaultValue)-2)
None.gif
END
None.gif
None.gif
None.gif
None.gif
GO
None.gif
SET QUOTED_IDENTIFIER OFF 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
SET QUOTED_IDENTIFIER ON 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
CREATE FUNCTION dbo.fnColumnDefault(@sTableName varchar(128), @sColumnName varchar(128))
None.gif
RETURNS varchar(4000)
None.gif
AS
None.gif
BEGIN
None.gif    
DECLARE @sDefaultValue varchar(4000)
None.gif
None.gif    
SELECT    @sDefaultValue = dbo.fnCleanDefaultValue(COLUMN_DEFAULT)
None.gif    
FROM    INFORMATION_SCHEMA.COLUMNS
None.gif    
WHERE    TABLE_NAME = @sTableName
None.gif     
AND     COLUMN_NAME = @sColumnName
None.gif
None.gif    
RETURN     @sDefaultValue
None.gif
None.gif
END
None.gif
None.gif
GO
None.gif
SET QUOTED_IDENTIFIER OFF 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
SET QUOTED_IDENTIFIER ON 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
None.gif
None.gif
None.gif
None.gif
CREATE   FUNCTION dbo.fnIsColumnPrimaryKey(@sTableName varchar(128), @nColumnName varchar(128))
None.gif
RETURNS bit
None.gif
AS
None.gif
BEGIN
None.gif    
DECLARE @nTableID int,
None.gif        
@nIndexID int,
None.gif        
@i int
None.gif    
None.gif    
SET     @nTableID = OBJECT_ID(@sTableName)
None.gif    
None.gif    
SELECT     @nIndexID = indid
None.gif    
FROM     sysindexes
None.gif    
WHERE     id = @nTableID
None.gif     
AND     indid BETWEEN 1 And 254 
None.gif     
AND     (status & 2048= 2048
None.gif    
None.gif    
IF @nIndexID Is Null
None.gif        
RETURN 0
None.gif    
None.gif    
IF @nColumnName IN
None.gif        (
SELECT sc.[name]
None.gif        
FROM     sysindexkeys sik
None.gif            
INNER JOIN syscolumns sc ON sik.id = sc.id AND sik.colid = sc.colid
None.gif        
WHERE     sik.id = @nTableID
None.gif         
AND     sik.indid = @nIndexID)
None.gif     
BEGIN
None.gif        
RETURN 1
None.gif     
END
None.gif
None.gif
None.gif    
RETURN 0
None.gif
END
None.gif
None.gif
None.gif
None.gif
None.gif
GO
None.gif
SET QUOTED_IDENTIFIER OFF 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
SET QUOTED_IDENTIFIER ON 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
None.gif
CREATE       FUNCTION dbo.fnTableColumnInfo(@sTableName varchar(128))
None.gif
RETURNS TABLE
None.gif
AS
None.gif    
RETURN
None.gif    
SELECT    c.name AS sColumnName,
None.gif        c.colid 
AS nColumnID,
None.gif        dbo.fnIsColumnPrimaryKey(
@sTableName, c.name) AS bPrimaryKeyColumn,
None.gif        
CASE     WHEN t.name IN ('char''varchar''binary''varbinary''nchar''nvarchar'THEN 1
None.gif            
WHEN t.name IN ('decimal''numeric'THEN 2
None.gif            
ELSE 0
None.gif        
END AS nAlternateType,
None.gif        c.length 
AS nColumnLength,
None.gif        c.prec 
AS nColumnPrecision,
None.gif        c.scale 
AS nColumnScale, 
None.gif        c.IsNullable, 
None.gif        
SIGN(c.status & 128AS IsIdentity,
None.gif        t.name 
as sTypeName,
None.gif        dbo.fnColumnDefault(
@sTableName, c.name) AS sDefaultValue
None.gif    
FROM    syscolumns c 
None.gif        
INNER JOIN systypes t ON c.xtype = t.xtype and c.usertype = t.usertype
None.gif    
WHERE    c.id = OBJECT_ID(@sTableName)
None.gif
None.gif
None.gif
None.gif
GO
None.gif
SET QUOTED_IDENTIFIER OFF 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
SET QUOTED_IDENTIFIER ON 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif
None.gif
CREATE FUNCTION dbo.fnTableHasPrimaryKey(@sTableName varchar(128))
None.gif
RETURNS bit
None.gif
AS
None.gif
BEGIN
None.gif    
DECLARE @nTableID int,
None.gif        
@nIndexID int
None.gif    
None.gif    
SET     @nTableID = OBJECT_ID(@sTableName)
None.gif    
None.gif    
SELECT     @nIndexID = indid
None.gif    
FROM     sysindexes
None.gif    
WHERE     id = @nTableID
None.gif     
AND     indid BETWEEN 1 And 254 
None.gif     
AND     (status & 2048= 2048
None.gif    
None.gif    
IF @nIndexID IS NOT Null
None.gif        
RETURN 1
None.gif    
None.gif    
RETURN 0
None.gif
END
None.gif
None.gif
None.gif
GO
None.gif
SET QUOTED_IDENTIFIER OFF 
None.gif
GO
None.gif
SET ANSI_NULLS ON 
None.gif
GO
None.gif

 第四步:生成测试数据表,并执行

ContractedBlock.gif ExpandedBlockStart.gif Code
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**//************************创建测试数据表 Product  *******************************/
None.gif
if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Product]'and OBJECTPROPERTY(id, N'IsUserTable'= 1)
None.gif 
BEGIN
None.gif
CREATE TABLE [Product] (
None.gif    
[P_ID] [bigint] NOT NULL ,
None.gif    
[P_Name] [nvarchar] (255) COLLATE Chinese_PRC_CI_AS NULL ,
None.gif    
[CategoryID1] [int] NULL ,
None.gif    
[CategoryID2] [int] NULL ,
None.gif    
[CategoryID3] [int] NULL ,
None.gif    
[P_SingleIntro] [nvarchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
None.gif    
[P_Intro] [ntext] COLLATE Chinese_PRC_CI_AS NULL ,
None.gif    
[P_Order] [float] NULL ,
None.gif    
[P_TopTime] [smalldatetime] NULL ,
None.gif    
[P_BigImage] [nvarchar] (150) COLLATE Chinese_PRC_CI_AS NULL ,
None.gif    
[P_SmallImage] [nvarchar] (150) COLLATE Chinese_PRC_CI_AS NULL ,
None.gif    
[CurState] [smallint] NOT NULL ,
None.gif    
[RecState] [smallint] NOT NULL ,
None.gif    
[P_CheckInfo] [nvarchar] (80) COLLATE Chinese_PRC_CI_AS NULL ,
None.gif    
[P_L_ID] [int] NOT NULL ,
None.gif    
[P_NewKey1] [nvarchar] (300) COLLATE Chinese_PRC_CI_AS NULL ,
None.gif    
[AddTime] [datetime] NOT NULL ,
None.gif    
[AddUser] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
None.gif    
[ModTime] [datetime] NOT NULL ,
None.gif    
[ModUser] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
None.gif    
[F1] [int] NOT NULL ,
None.gif    
[F3] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
None.gif    
CONSTRAINT [PK_Product] PRIMARY KEY  CLUSTERED 
None.gif    (
None.gif        
[P_ID]
None.gif    )  
ON [PRIMARY] 
None.gif
ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
None.gif
END
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**//********测试生成***********/
None.gif
--CPP__SYS_MakeDeleteRecordProc  'Product',0
None.gif--
go
None.gif--
CPP__SYS_MakeInsertRecordProc  'Product',0
None.gif--
go
None.gif--
CPP__SYS_MakeSelectRecordProc  'Product',0
None.gif--
go
None.gif--
CPP__SYS_MakeUpdateRecordProc  'Product',0
None.gif--
go
None.gif

None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**//********测试生成***********/
None.gifCPP__SYS_MakeDeleteRecordProc  
'Product',1
None.gif
go
None.gifCPP__SYS_MakeInsertRecordProc  
'Product',1
None.gif
go
None.gifCPP__SYS_MakeSelectRecordProc  
'Product',1
None.gif
go
None.gifCPP__SYS_MakeUpdateRecordProc  
'Product',1
None.gif
go
None.gif

 效果如图:

SQL2000.png 

 SQL2000_Insert.png

 下载SQL

转载于:https://www.cnblogs.com/downmoon/archive/2009/06/06/1497617.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值