求一存储过程

alphawin 2004-04-26 10:51:49
数据库中有3张表,第一张bm里有二个字段,ID和TABLENAME,第二张bsx有ID和zdsx(字段类型),第三张有ID,tablename(和bm的tablename关联),zdm(字段名),zdsx(和bsx的zdsx关联),字段长度.
求一存储过程能传一参数(表名)根据第一张表里的tablename在数据库中生成表。字段名称,字段类型和长度根据第2和第3张表来。
...全文
66 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sy246 2004-04-26
  • 打赏
  • 举报
回复
狠!
brightheroes 2004-04-26
  • 打赏
  • 举报
回复
临时表可以不用哦
可以精简一下:)
hivak47 2004-04-26
  • 打赏
  • 举报
回复
向高手们学习!!!!!!!!!!!!!!!
brightheroes 2004-04-26
  • 打赏
  • 举报
回复
具体的你可以看一下生成的Create Sql语句是否正确,不对的地方稍微改下就可以了
brightheroes 2004-04-26
  • 打赏
  • 举报
回复
t3
id tableid zdlxid(字段名类型ID) zdm
1 1 1 id
2 1 2 createtime
3 1 3 password
4 1 4 username

对于这个t3表,最好加上字段 zdlen(长度),iskey(是否主键)
这样处理更好一些
alphawin 2004-04-26
  • 打赏
  • 举报
回复
我马上试一下,成功就给分啊
brightheroes 2004-04-26
  • 打赏
  • 举报
回复
我给出我的表结构,供楼主参考

t1

id tablename

1 MyTable


t2

id zdsx(字段类型)

1 int
2 datetime
3 char
4 varchar

t3

id tableid zdlxid(字段名类型ID)





zdm
brightheroes 2004-04-26
  • 打赏
  • 举报
回复
sorry ,上面的
set @sql = 'create table [dbo].[' + @tablename + ']{'
应该为
set @sql = 'create table [dbo].[' + @tablename + ']('

set @sql = @sql + '}on[PRIMARY]'
应该为 set @sql = @sql + ')on[PRIMARY]'

我用错括号了

还有:
你的第三个表里面,除了字段类型之外,还要有一个字段,用来描述字段的长度,比如说
字段类型 长度
varchar 128
最好还有一个字段,表示是否为主键

大概就是这么个意思
我已经调试通过

edobnet 2004-04-26
  • 打赏
  • 举报
回复
动态SQL
brightheroes 2004-04-26
  • 打赏
  • 举报
回复
大概是下面的意思



select a.tablename,c.zdm,b.zdsx into #temp from t1 a,t2 b,t3 c where c.tableid = a.id and c.zdlxid = b.id and c.tableid = 1

declare @sql varchar(8000)
declare @tablename varchar(128)
declare @itemname varchar(128)
declare @itemtype varchar(128)


select @tablename=tablename from #temp

DECLARE MyCursor CURSOR FOR select zdm,zdsx from #temp

set @sql = 'create table [dbo].[' + @tablename + ']{'

OPEN MyCursor

FETCH NEXT FROM MyCursor into @itemname,@itemtype
WHILE @@FETCH_STATUS = 0
BEGIN
set @sql = @sql + '[' + @itemname + ']['+ @itemtype + '],'
FETCH NEXT FROM MyCursor into @itemname,@itemtype
END

select @sql = substring(@sql,0,len(@sql))

set @sql = @sql + '}on[PRIMARY]'

CLOSE MyCursor

print @sql

exec @sql

drop table #temp
DEALLOCATE MyCursor

alphawin 2004-04-26
  • 打赏
  • 举报
回复
麻烦把具体的这个存储过程写出来,好吗
洪十二 2004-04-26
  • 打赏
  • 举报
回复
用动态SQL.
1.execute immediate 'create table ......'
2.dbms_sql.parse
CMIC 2004-04-26
  • 打赏
  • 举报
回复
关联三张表,开一个游标,一个一个见表,不应该太难就是麻烦。
如果可以下写两个用户函数,通过表名获得字段类型和长度,然后在存储工程中调用,可能容易些。
brightheroes 2004-04-26
  • 打赏
  • 举报
回复
建议
取出字段的信息这个不用说了吧
在Sqlserver中找一个表
看看它的sql脚本
直接拿来改改用就可以了
brightheroes 2004-04-26
  • 打赏
  • 举报
回复
修改两个地方
1:declare @sql varchar(8000) -->declare @sql nvarchar(4000)
2:exec @sql ---> exec sp_executesql @sql
这样就OK了
alphawin 2004-04-26
  • 打赏
  • 举报
回复
exec @sql执行不了啊,创建存储过程可以通过,但运行时不可以
alphawin 2004-04-26
  • 打赏
  • 举报
回复
我的表里本来就有字段长度啊,像int型就可以默认长度,而char就要指定长度拉,你没考虑 吧
慧龙照片恢复软件是一个特殊的数据恢复工具,专门用于恢复误删除、格式化、文件系统错误、分区打不开等造成的照片文件丢失;支持硬盘、光盘、U盘、MP3、数码相机、手机、存储卡等存储介质。支持FAT、FAT32、NTFS、CDFS等各种分区格式,但不能恢复在NTFS分区中压缩存储的文件,也不能恢复加密的文件。全盘扫描查找照片数据,不放过任何一个可恢复的照片文件。   慧龙照片恢复软件在恢复文件过程中不会往源分区写入数据,因此可保证不会对源数据造成再次损害,可放心使用。软件还支持从磁盘映像文件中恢复照片文件,方便进行异地数据恢复,软件本身也具有制作磁盘映像文件的功能。   本软件目前仅支持恢复JPG格式的照片文件(更多文件格式正在增加中),JPG格式是最流行的数码照片文件格式,绝大多数数码相机及拍照手机均采用该格式存储照片,因此慧龙照片恢复软件能胜任绝大多数照片文件的恢复任务,照片恢复的成功率也很高。   慧龙照片恢复软件会提取照片文件中的拍照时间,作为恢复出来的文件修改时间,方便恢复后对照片进行整理。只要在文件夹里选择按“修改时间”排序,照片就是按拍照的先后顺序排列了,非常方便。   提示: 不要下载软件到要恢复数据的盘符里,也不要解压文件到要恢复的盘符里,否则可能再次破坏源数据。如果是相机直接连接电脑进行数据恢复,请保证电池电量足够,免得恢复过程中耗完电了,下次又要重新扫描。   为什么选择慧龙照片恢复软件?与其他数据恢复软件相比,慧龙照片恢复软件具有以下特点:   1. 逐一扫描存储扇区,寻找照片数据,提高照片文件恢复成功率;   2. 使用超简单,鼠标点击几下即可开始恢复;   3. 体积小,下载快,绿色软件,无需安装,不会在系统里留下任何垃圾;   4. 不依赖于文件系统,即使目录区、文件分配表完全损毁也能进行恢复;   5. 支持从映像文件恢复照片,因而可完全避免反复扫描对源数据造成损害;软件本身也包含制作映像文件的功能。

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧