把我搞晕了的一个问题:
存储过程是这样写的
CREATE procedure sp_News_Add
@title nvarchar(100),
@source nvarchar(50),
@editor nvarchar(20),
@fid nvarchar(8),
@content ntext,
@aboutnews nvarchar(2000),
@isindex int,
@islist int,
@ishot int,
@iscolor int,
@days int,
@tablename varchar(50)
as
begin
declare @news_id int
begin tran
--把新闻存入相应的表
exec('insert into '+@tablename+'(title,editor,fid,content,aboutnews,isindex,islist,ishot,iscolor,days) values('+@title+','+@content+','+@editor+','+@fid+','+@aboutnews+','+@isindex+','+@islist+','+@ishot+','+@iscolor+','+@days+')')
-- select "insert into "+@tablename+"(title,editor,fid,content,aboutnews,isindex,islist,ishot,iscolor,days) values("+@title+")"
--set @news_id=IDENT_CURRENT(@tablename)
--同时把新闻存入总表
--exec('insert into news(title,content,editor,fid,aboutnews,isindex,islist,ishot,iscolor,days,news_id,tablename) values('+@title+','+@content+','+@editor+','+@fid+','+@aboutnews+','+@isindex+','+@islist+','+@ishot+','+@iscolor+','+@days+','+@news_id+','+@tablename+')')
if @@error<>0 --有错误进行回滚
begin
rollback tran
return 1 --返回1表示添失败
end
commit tran
return 0
end
GO
这样调用的
exec sp_News_Add @fid='05010101',@title='xxxf',@source='dd',@editor='d',@content='d',@aboutnews='dd',@tablename='news_college',
@isindex=1,@ishot=1,@islist=1,@iscolor=1,@days=1
出错如下:
服务器: 消息 128,级别 15,状态 1,行 1
在此上下文中不允许使用 'xxxf'。此处只允许使用常量、表达式或变量。不允许使用列名。
问题点数:0、回复次数:3Top
1 楼btut2004(养鱼炒股)回复于 2004-09-04 07:42:51 得分 0
是不是某个列名的问题Top
2 楼zjcxc(邹建)回复于 2004-09-04 07:58:50 得分 0
CREATE procedure sp_News_Add
@title nvarchar(100),
@source nvarchar(50),
@editor nvarchar(20),
@fid nvarchar(8),
@content ntext,
@aboutnews nvarchar(2000),
@isindex int,
@islist int,
@ishot int,
@iscolor int,
@days int,
@tablename varchar(50)
as
begin
declare @news_id int
begin tran
--把新闻存入相应的表
declare @s nvarchar(4000)
set @s='insert into '+@tablename+'(title,editor,fid,content,aboutnews,isindex,islist,ishot,iscolor,days) values(@title,@content,@editor,@fid,@aboutnews,@isindex,@islist,@ishot,@iscolor,@days)'
exec sp_executesql @s
,N'@title nvarchar(100),
@editor nvarchar(20),
@fid nvarchar(8),
@content ntext,
@aboutnews nvarchar(2000),
@isindex int,
@islist int,
@ishot int,
@iscolor int,
@days int'
,@title,@editor,@fid,@content,@aboutnews,@isindex,@islist,@ishot,@iscolor,@days
-- select "insert into "+@tablename+"(title,editor,fid,content,aboutnews,isindex,islist,ishot,iscolor,days) values("+@title+")"
--set @news_id=IDENT_CURRENT(@tablename)
--同时把新闻存入总表
--exec('insert into news(title,content,editor,fid,aboutnews,isindex,islist,ishot,iscolor,days,news_id,tablename) values('+@title+','+@content+','+@editor+','+@fid+','+@aboutnews+','+@isindex+','+@islist+','+@ishot+','+@iscolor+','+@days+','+@news_id+','+@tablename+')')
if @@error<>0 --有错误进行回滚
begin
rollback tran
return 1 --返回1表示添失败
end
commit tran
return 0
end
GO
Top
3 楼wanghuirui(wanghuirui)回复于 2004-09-04 08:14:48 得分 0
可是我的内容content字段是ntext型,
如果:
declare @s nvarchar(4000) 这样的话,会丢失数据的
Top




