Foxtable(狐表)用户栏目专家坐堂 → 求助SQL存储过程代码?(已解决)


  共有8554人关注过本帖树形打印复制链接

主题:求助SQL存储过程代码?(已解决)

帅哥哟,离线,有人找我吗?
lxl
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2009/11/25 9:57:00 [显示全部帖子]

列名 表名 为变量必须动态生成sql
CREATE PROCEDURE Test AS
declare @gx varchar(20)
select @gx=名称 from 工序 where id=1
declare @a  nvarchar(20)
declare @b  nvarchar(20)
declare @c  nvarchar(20)
declare @sql    nvarchar(max)
set @a=@gx+'TrackIn'
set @b=@gx+'TrackOut'
set @c=@gx+'操作员'
set @sql = 'alter table _在线 add '
+ @a + ' nvarchar(20) null, '
+ @b + ' nvarchar(20) null, '
+ @c + ' nvarchar(20) null  '
exec sp_executesql @sql
select * from _在线
GO


[此贴子已经被作者于2009-11-25 9:58:42编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2009/11/25 10:04:00 [显示全部帖子]

给你简化了一下
CREATE PROCEDURE Test AS
declare @gx varchar(20)
select @gx=名称 from 工序 where id=1
declare @sql    nvarchar(max)
set @sql = 'alter table _在线 add ' 
+ @gx + 'TrackIn nvarchar(20) null, '
+ @gx + 'TrackOut nvarchar(20) null, '
+ @gx + '操作员 nvarchar(20) null  '
exec sp_executesql @sql
select * from _在线
GO


你为什么要把增加列放在储存过程里面呢?列名重复就会出错。


 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2009/11/25 10:38:00 [显示全部帖子]

以下是引用exonjee在2009-11-25 10:20:00的发言:

exec test 运行后报错,

服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: 'nvarchar' 附近有语法错误。

(所影响的行数为 0 行)

我在sql server测试过没问题。
你用的是sql server 2000还是2005
2000 不支持sp_executesql 要改成exec

还有,你一条记录就在另外一个表增加3个字段,感觉这样的结构不合理
为什么不考虑把在线表设成工序表的字表呢?
新增工序名,_在线 表增加三条记录
————————————————————————————
说错了 2000能调用sp_executesql
要把nvarchar(max)  改成nvarchar(200) 

[此贴子已经被作者于2009-11-25 10:42:45编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2009/11/25 11:38:00 [显示全部帖子]

1.错误应该是兼容性的问题,没用过sql 2000 所以不知道怎么改
2.数据库的结构一般都是提前设计好的,不应该在运行过程中修改表结构
所以我觉得应该这样设计:
工序表:
ID  工序名称
1     GX1
2     GX2
3     GX3


在线表
ID   工序ID      TrackIn                    TrackOut                  操作员
1        1        2009/11/10             2009/11/12                张三
2        2        2009/11/10             2009/11/12                李四
3        2        2009/11/13             2009/11/15                王五
4        3        2009/11/15             2009/11/16                王五

  


 回到顶部