在做extjs開發時,介面grid的展示也是需要model(js)。這些model的資料最終肯定全部來自資料庫,雖然不一定完全對應一張表,但是多數情況下,model欄位與資料庫幾乎是完全對應的。當資料庫表較多,表的字段也較多時,這時你才會意識到寫乙個sql指令碼片斷,能夠自動拼接出extjs的model的js指令碼是多麼省時的事!
用寫程式生成extjs的model的方式也是可以的,也有人曾想過使用 entity framework等模板生成器來做。但個人認為還是沒有直接寫sql片斷來得快,而且同樣是一勞永逸的事,快速方便。
-- @prefix是表的字首的查詢條件
declare @prefix varchar(50) = 'cms_data_'
declare @table table(rownum int,tabelname varchar(50),fieldname varchar(50),type varchar(50))
insert
into @table
select row_number() over(order
by obj.name,column_id),obj.name tablename,col.name,
case
when tp.name in('date','datetime','datetime2','smalldatetime') then
'date'
when tp.name in('int','bigint') then
'int'
when tp.name in('bit') then
'boolean'
when tp.name in('float','real','money','decimal','numeric','smallmoney') then
'float'
else
'string'
endas [type]
from sys.all_columns col
left
join sysobjects obj on obj.id = col.object_id
left
join sys.types tp on tp.user_type_id = col.user_type_id
where xtype='u'
and category=0
and obj.name like @prefix + '%'
select * from @table
declare @tablename varchar(50) = '',@lasttable varchar(50),@sql
varchar(8000) = '',
@fieldname varchar(50),@type varchar(50)
declare @cur int = 1,@max
int = (select
count(*) from @table),@tmpindex int = 0
while @cur <= @max
begin
select @tablename = tabelname,@fieldname = fieldname,@type = [type] from @table
where rownum = @cur
--print @tablename + ',' + @fieldname
-- 初始化(第一行)
if @lasttable is
null
begin
set @lasttable = @tablename
end-- 處理輸出
if @tablename <> @lasttable
begin
set @tmpindex = charindex('_',@lasttable,charindex('_',@lasttable,1) + 1)
print
'/**
*@description ' + stuff(@lasttable,1,@tmpindex,'') + '
*/ext.define(''' + @prefix + '.' + stuff(@lasttable,1,@tmpindex,'') + 'model'', );'
-- 重置狀態
set @lasttable = @tablename
-- 清空@sql
set @sql = ''
end -- 處理每一行資料
if @lasttable = @tablename
begin
set @sql += ',
'if @lasttable is
null
begin
set @lasttable = @tablename
endend --print @sql
set @cur += 1
end-- 最後一張表的輸出
if @sql
isnot
null
begin
set @tmpindex = charindex('_',@lasttable,charindex('_',@lasttable,1) + 1)
print
'/**
*@description ' + stuff(@lasttable,1,@tmpindex,'') + '
*/ext.define(''' + @prefix + '.' + stuff(@lasttable,1,@tmpindex,'') + 'model'', );'
end
Django根據資料庫表反向生成Model
用過django的人應該都熟悉下面兩條命令 python manage.py make migrations 此時資料庫中還不會生效 既然有根據model自動生成資料庫表的命令,那麼肯定就有根據資料庫表反向生成model的命令 python manage.py inspectdb 使用這條命令,會根...
根據資料庫生成 sql insert 資料
create procedure dbo.uspoutputdata tablename sysname as declare column varchar 1000 declare columndata varchar 1000 declare sql varchar 4000 declare x...
根據資料庫結構生成TreeView
現在大多數的方法是採用遞迴,但這種操作會頻繁的去select資料庫,降低了執行效率,稍微改動一些,效果會好不少,這裡介紹一種方法,即一次性select出所有資料,然後按照parentid排序,逐條新增到treeview,新增前,先遍歷treeview,查詢他的上一級節點,遍歷treeview可比se...