日期:2014-05-18  浏览次数:20462 次

关于带参数表名的存储过程
我想实现输入参数即可执行的过程,可是报错?怎么解决
declare @cs int
creat proc sp_kssjzl @cs int
as
alter table 考生表@cs add tel nvarchar(@cs0)
alter table 考生表@cs add 交费标志 nvarchar(10)
alter table 考生表@cs add 交费序号 nvarchar(10)
alter table 考生表@cs add 收费方式 nvarchar(10)
alter table 考生表@cs add 网报日期 nvarchar(10)
UPDATE 考生表@cs SET 网报日期=报考日期,tel=联系电话 where 网报日期 is null
UPDATE 考生表@cs SET 交费标志 = NULL,交费序号 = NULL,收费方式=NULL
UPDATE b SET b.交费序号 = a.收费序号, b.交费标志 = 'bmjf',b.收费方式=a.[收费人/计算机名]
FROM web_ShouFei as a INNER JOIN 考生表@cs as b ON a.主键编号 = b.主键编号
WHERE (a.是否交费 = '1' and a.examsort='@cs')

  UPDATE 考生表@cs SET 身份证号 = REPLACE(身份证号, 'x', 'X')
  update 考生表@cs set 姓名=replace(姓名,char(10),'')
  update 考生表@cs set 姓名=replace(姓名,char(13),'')
  update 考生表@cs set 姓名=replace(姓名,' ','')
  update 考生表@cs set 姓名=replace(姓名,' ','')
go


------解决方案--------------------
表名或者字段名为变量的时候 要用动态SQL
------解决方案--------------------
SQL code

declare @cs int
create proc sp_kssjzl @cs int
as
declare @sql varchar(2000)
set @sql='
alter table 考生表'+ltrim(@cs)+' add tel nvarchar('+ltrim(@cs)+')
alter table 考生表'+ltrim(@cs)+' add 交费标志 nvarchar(10)
alter table 考生表'+ltrim(@cs)+' add 交费序号 nvarchar(10)
alter table 考生表'+ltrim(@cs)+' add 收费方式 nvarchar(10)
alter table 考生表'+ltrim(@cs)+' add 网报日期 nvarchar(10)
UPDATE 考生表@cs SET 网报日期=报考日期,tel=联系电话 where 网报日期 is null
UPDATE 考生表@cs SET 交费标志 = NULL,交费序号 = NULL,收费方式=NULL
UPDATE b SET b.交费序号 = a.收费序号, b.交费标志 = '+''''+'bmjf'+''''+',b.收费方式=a.[收费人/计算机名]
FROM web_ShouFei as a INNER JOIN 考生表'+ltrim(@cs)+' as b ON a.主键编号 = b.主键编号
WHERE (a.是否交费 = '+''''+'1'+''''+' and a.examsort='+ltrim(@cs)+')'
exec(@sql)
declare @str varchar(2000)
set @str='
  UPDATE 考生表'+ltrim(@cs)+' SET 身份证号 = REPLACE(身份证号, '+''''+'x'+''''++','+''''+ 'X'+''''+')
  update 考生表'+ltrim(@cs)+' set 姓名=replace(姓名,char(10),'''')
  update 考生表'+ltrim(@cs)+' set 姓名=replace(姓名,char(13),'''')
  update 考生表'+ltrim(@cs)+' set 姓名=replace(姓名,'+' '+','''')
  update 考生表'+ltrim(@cs)+' set 姓名=replace(姓名,'+' '+','''')'
go

------解决方案--------------------
没这张表啊,语句拼接应该是没问题了,你的表不存在???