存储过程参数传表名问题! 求救!

libra0v0 2010-11-01 03:59:32
存储过程:
USE [School_Canton]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Proc [dbo].[Proc_IntoStu]
@学校编号 nvarchar(30),
@学籍号码 nvarchar(50),
@身份证号 nvarchar(50) ,
@姓名 nvarchar(32),
@曾用名 nvarchar(50),
@性别 nvarchar(32),
@生日 datetime,
@民族 nvarchar(50) ,
@籍贯 nvarchar(50),
@入学年份 int,
@班级 int,
@年级 int,
@户籍地址 nvarchar(50),
@所属派出所 nvarchar(50),
@联系电话 nvarchar(50),
@是否贫困生 char(1),
@补助 char(1),
@免杂费 char(1),
@免书本费 char(1),
@生活补助费 char(1),
@父亲 nvarchar(50),
@母亲 nvarchar(50),
@父亲单位 nvarchar(50),
@母亲单位 nvarchar(50),
@来源 nvarchar(50),
@特长 nvarchar(50),
@出生地 nvarchar(50),
@实际住址 nvarchar(50),
@视力残疾 char(1),
@听力残疾 char(1),
@智力残疾 char(1),
@原学籍号码 nvarchar(50),
@转出转入学校名称 nvarchar(50),
@留守儿童 char(1),
@学生标识号 uniqueidentifier,
@Address nvarchar(50),
@资料录入时间 datetime

as
exec('Insert into'+@Address+'([学校编号],[学籍号码],[身份证号],[姓名],[曾用名],
[性别],[生日],[民族],[籍贯],[入学年份],
[班级],[年级],[户籍地址],所属派出所,联系电话,
是否贫困生,补助,免杂费,免书本费,生活补助费,
父亲,母亲,父亲单位,母亲单位,来源,
特长,出生地,实际住址,视力残疾,听力残疾,
智力残疾,原学籍号码,转出转入学校名称,
留守儿童,学生标识号,资料录入时间) values('+@学校编号+','+@学籍号码+','+@身份证号+','+@姓名+','+@曾用名+','+@性别+','+@生日+','+@民族+',
'+@籍贯+','+@入学年份+','+@班级+','+@年级+','+@户籍地址+','+@所属派出所+','+@联系电话+',
'+@是否贫困生+','+@补助+','+@免杂费+','+@免书本费+','+@生活补助费+',
'+@父亲+','+@母亲+','+@父亲单位+','+@母亲单位+','+@来源+','+@特长+','+@出生地+','+@实际住址+','+@视力残疾+','+@听力残疾+',
'+@智力残疾+','+@原学籍号码+','+@转出转入学校名称+','+@留守儿童+','+@学生标识号+','+@资料录入时间+')'


上面那样写 就不行!
这样的话 (下图)就行! 就想问下 怎么样才能既传表名参数 又保证不报错呢! 谢谢

USE [School_Canton]
GO
/****** 对象: StoredProcedure [dbo].[Proc_IntoStu] 脚本日期: 11/01/2010 15:11:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Proc [dbo].[Proc_IntoStu]
@学校编号 nvarchar(30),
@学籍号码 nvarchar(50),
@身份证号 nvarchar(50) ,
@姓名 nvarchar(50),
@曾用名 nvarchar(50),
@性别 nvarchar(32),
@生日 datetime,
@民族 nvarchar(50) ,
@籍贯 nvarchar(50),
@入学年份 int,
@班级 int,
@年级 int,
@户籍地址 nvarchar(50),
@所属派出所 nvarchar(50),
@联系电话 nvarchar(50),
@是否贫困生 char(1),
@补助 char(1),
@免杂费 char(1),
@免书本费 char(1),
@生活补助费 char(1),
@父亲 nvarchar(50),
@母亲 nvarchar(50),
@父亲单位 nvarchar(50),
@母亲单位 nvarchar(50),
@来源 nvarchar(50),
@特长 nvarchar(50),
@出生地 nvarchar(50),
@实际住址 nvarchar(50),
@视力残疾 char(1),
@听力残疾 char(1),
@智力残疾 char(1),
@原学籍号码 nvarchar(50),
@转出转入学校名称 nvarchar(50),
@留守儿童 char(1),
@学生标识号 uniqueidentifier,
@Address nvarchar(50),
@资料录入时间 datetime

as
Insert into 南京市学生基本信息([学校编号],[学籍号码],[身份证号],[姓名],[曾用名],
[性别],[生日],[民族],[籍贯],[入学年份],
[班级],[年级],[户籍地址],所属派出所,联系电话,
是否贫困生,补助,免杂费,免书本费,生活补助费,
父亲,母亲,父亲单位,母亲单位,来源,
特长,出生地,实际住址,视力残疾,听力残疾,
智力残疾,原学籍号码,转出转入学校名称,
留守儿童,学生标识号,资料录入时间) values(@学校编号,@学籍号码,@身份证号,@姓名,@曾用名,@性别,@生日,@民族,
@籍贯,@入学年份,@班级,@年级,@户籍地址,@所属派出所,@联系电话,
@是否贫困生,@补助,@免杂费,@免书本费,@生活补助费,
@父亲,@母亲,@父亲单位,@母亲单位,@来源,@特长,@出生地,@实际住址,@视力残疾,@听力残疾,
@智力残疾,@原学籍号码,@转出转入学校名称,@留守儿童,@学生标识号,@资料录入时间)
...全文
184 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yujiayou 2010-11-02
  • 打赏
  • 举报
回复
这样些太有才了
眼都看花了
还是sqlparameter好
chen_ya_ping 2010-11-02
  • 打赏
  • 举报
回复
for example:
declare @tableName varchar(50)
set @tableName='Test'
select * from @tableName
上述的都是在查询分析器中是有错误的。
guozhaoyou1 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hch126163 的回复:]
最简单的方法,你 print 一下你拼接的t-sql.就很容易发现错误了!

如果 @学校编号 = ‘001’
values('+@学校编号+', ==》拼接后是 values(001,!

很明显,你的编号是字符型的,少了一对单引号!!!

把所有字符型的字段加一对单引号 就可以了!!! 注意:2个单引号才会转译成一个单引号!
values('''+@学校编号+''',.....……
[/Quote]


欧卖嘎得 我比楼主还粗心 加到表名了
hch126163 2010-11-02
  • 打赏
  • 举报
回复
最简单的方法,你 print 一下你拼接的t-sql.就很容易发现错误了!

如果 @学校编号 = ‘001’
values('+@学校编号+', ==》拼接后是 values(001,!

很明显,你的编号是字符型的,少了一对单引号!!!

把所有字符型的字段加一对单引号 就可以了!!! 注意:2个单引号才会转译成一个单引号!
values('''+@学校编号+''',..... 这样就可以了


打一壶酱油 2010-11-02
  • 打赏
  • 举报
回复
语句中拼接表名 address 没有错,错的是 values 中的字符字段拼接时要用类似 ','''+@姓名+''',' 的格式
打一壶酱油 2010-11-02
  • 打赏
  • 举报
回复
语句中拼接 表明没有错,错的是 values 中的字符字段拼接时要用 ','''+@姓名+''','
guozhaoyou1 2010-11-02
  • 打赏
  • 举报
回复
exec('Insert into'''+convert(varchar(50),@Address) +'''([学校编号],
guozhaoyou1 2010-11-02
  • 打赏
  • 举报
回复
exec('Insert into'''+@Address+'''([学校编号],


这样写试试看
fy_study 2010-11-01
  • 打赏
  • 举报
回复
偶的神啊!感觉还不如在代码里用SqlParameter一个一个给看的清晰呢
kofkyo 2010-11-01
  • 打赏
  • 举报
回复
表名也是参数的话,拼SQL
tyang258 2010-11-01
  • 打赏
  • 举报
回复
sql参数只能作为条件写入sql语句,不然你拼接sql语句也行

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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