我的TSQL代码生成器

大家都应该用过代码生成器,像CodeSmith等,其实对咱们程序员而言,要生成代码其实是有很多办法的,比如,咱们就试试用TSQL生成TSQL的存储过程吧,直接上代码:
下面这段代码会根据Northwind中的Customers表生成一个更新数据的存储过程。大家可以临活发挥,比如写个游标遍历数据库中的所有表,然后生成CRUD所有的存储过程。。。

ContractedBlock.gif ExpandedBlockStart.gif Code
/*
    Tony's litte cute TSQL Code Generator
*/
USE NORTHWIND

DECLARE @TableName     NVARCHAR(200)
DECLARE @Parameters     VARCHAR(8000)
DECLARE @UpdateFields     VARCHAR(8000)

DECLARE @PrimaryKey     NVARCHAR(200)
SELECT @TableName = 'Customers',@Parameters = ''@UpdateFields = ''

SELECT @PrimaryKey =  CCU.COLUMN_NAME
FROM     INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC 
    
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE CCU ON TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
WHERE TC.TABLE_NAME = @TableName AND TC.CONSTRAINT_TYPE='PRIMARY KEY'

PRINT 'CREATE PROCEDURE dbo.usp_Update' + @TableName + 'ByPK'


SELECT @Parameters = @Parameters + '    @'+COLUMN_NAME+'    '+
    
CASE WHEN DATA_TYPE='NVARCHAR' OR DATA_TYPE='VARCHAR' OR DATA_TYPE='CHAR'OR DATA_TYPE='NCHAR'
        
THEN DATA_TYPE+ '('+CAST(CHARACTER_MAXIMUM_LENGTH AS NVARCHAR(20))+')'
    
ELSE
        DATA_TYPE
    
END)+','+CHAR(10)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName --AND COLUMN_NAME != @PrimaryKey

PRINT LEFT(@Parameters,LEN(@Parameters)-2)
PRINT 'AS'+CHAR(10)+'BEGIN'
    
PRINT '    UPDATE ' + @TableName
    
PRINT '    SET'

    
SELECT @UpdateFields = @UpdateFields +'        '+COLUMN_NAME +' = @'+ COLUMN_NAME +','+ CHAR(10)
    
FROM INFORMATION_SCHEMA.COLUMNS
    
WHERE TABLE_NAME = @TableName AND COLUMN_NAME != @PrimaryKey

    
PRINT LEFT(@UpdateFields,LEN(@UpdateFields-2)
    
PRINT '    WHERE'
    
PRINT '        '+ @PrimaryKey +' = @' + @PrimaryKey
PRINT 'END'

下面是生成的结果。。

CREATE PROCEDURE dbo.usp_UpdateOrdersByPK
    @OrderID    int,
    @CustomerID    nchar,
    @EmployeeID    int,
    @OrderDate    datetime,
    @RequiredDate    datetime,
    @ShippedDate    datetime,
    @ShipVia    int,
    @Freight    money,
    @ShipName    nvarchar (40),
    @ShipAddress    nvarchar (60),
    @ShipCity    nvarchar (15),
    @ShipRegion    nvarchar (15),
    @ShipPostalCode    nvarchar (10),
    @ShipCountry    nvarchar (15)
AS
BEGIN
    UPDATE Orders
    SET
        CustomerID = @CustomerID,
        EmployeeID = @EmployeeID,
        OrderDate = @OrderDate,
        RequiredDate = @RequiredDate,
        ShippedDate = @ShippedDate,
        ShipVia = @ShipVia,
        Freight = @Freight,
        ShipName = @ShipName,
        ShipAddress = @ShipAddress,
        ShipCity = @ShipCity,
        ShipRegion = @ShipRegion,
        ShipPostalCode = @ShipPostalCode,
        ShipCountry = @ShipCountry
    WHERE
        OrderID = @OrderID
END

转载于:https://www.cnblogs.com/tonywoo/archive/2009/07/30/1535530.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值