exec问题!!急!!!!急盼答案!!!!

Anty1980 2004-11-22 03:44:13
在存储过程中执行exec(@strfield)但是由于@strfield的长度太长,exec执行时总是截断字符串,@strfield 的类型为nvarchar(4000),请问我该怎么解决好?此字符串为动态构建,也想过把它拆分成若干个小的字符串,但没有实现,请高手指点!!谢谢!!!
...全文
162 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wukongoh 2004-11-23
  • 打赏
  • 举报
回复
生成表的数据库你看对没有?经常出现不在本数据库内执行语句的情况。
Anty1980 2004-11-22
  • 打赏
  • 举报
回复
刚才试过了,不是截断了字符串,使我的语法错误。
可是现在有一个更奇怪的问题,我的语句执行都没有错误,可是就是没有表生成。
wukongoh 2004-11-22
  • 打赏
  • 举报
回复
你在exec(@strfield),这句话之前先把@strfield变量输出,执行看有无错误。只要变量长度小于4000,应该不会出现截断字符串的情况。
rivey 2004-11-22
  • 打赏
  • 举报
回复
不明白.看一半天还是不明白.

帮你顶顶

nvarchar支持4000的长度.应该不是这个原因.
你把create 的句子直接写出来,看能否建立不就可以知道它支持与否.
再者试试把你的动态句子打出来看看,句子是否正确....
Anty1980 2004-11-22
  • 打赏
  • 举报
回复
create table rcdfile_fwwjdj(id int identity,djh varchar (50),wh varchar (50),bt varchar (100),cwjg varchar (100),bcq datetime ,mj varchar (20),ztc varchar (50),cwrq datetime ,djrq datetime ,hjcd varchar (10),zrz varchar (10),ys int ,fs int ,qsfr varchar (10),ywlj varchar (30),fz varchar (100),bz varchar (100),wz varchar (10),lx varchar (10),gb varchar (10),ztdw varchar (10),ztsl int ,ztlx varchar (10),wjzt varchar (10),ybrq datetime ,cbrq datetime ,lh int ,destflah bit,destdate datetime,usestatus bit)

各位帮忙看看这个有没有错误。谢谢了!
Anty1980 2004-11-22
  • 打赏
  • 举报
回复
没人在吗???还请各位多多多帮忙,我将不胜感激!!!!
Anty1980 2004-11-22
  • 打赏
  • 举报
回复
CREATE PROCEDURE CrtUserRcdFrmTemp_p
@modleid int
AS
declare @name varchar(50) --字段名
declare @type varchar(50) --字段类型
declare @typelen int --类型长度
declare @strfield nvarchar(4000) --建立数据表的字符串
declare @strfield1 nvarchar(4000)
declare @strfield2 nvarchar(4000)
declare @strfield3 nvarchar(4000)
declare @strfield4 nvarchar(4000)
declare @strfield5 nvarchar(4000)

declare @tablename varchar(50)
--得到要建立的物理表的名称
select @tablename=code from recordformtemphead where id=@modleid
--判断是文件的还是档案的表
if (select rcdtype from recordcatalog where id=(select cataid from recordformtemphead where id=@modleid))=2
set @strfield='create table '+'rcd'+'archive_'+@tablename+'(id int identity,'
else
set @strfield='create table '+'rcd'+'file_'+@tablename+'(id int identity,'
declare readfield cursor
for
select code ,case ctrtype when 3 then 'varchar' when 4 then 'int' when 5 then 'datetime' when 2 then 'bit' end,strlen from recordformfield where id in (select fieldid from recordformtemp where frmid=@modleid)
open readfield
fetch next from readfield
into @name,@type,@typelen
while @@fetch_status =0
begin
--case @type when 'datetime' then set @strfield=@strfield+@name +' '+@type+' '+'('+convert(varchar,@typelen)+')'+','
set @typelen=convert(varchar,@typelen)
if @typelen='-1'
set @strfield=@strfield+@name + ' '+ @type+' '+','
else
set @strfield=@strfield+@name +' '+@type+' '+'('+convert(varchar,@typelen)+')'+','

fetch next from readfield
into @name ,@type,@typelen
end
close readfield
deallocate readfield

--建立数据库
--set @strfield=left(@strfield,len(@strfield)-1)
set @strfield=@strfield+'destflah bit,destdate datetime,usestatus bit)'
set @strfield=''''+@strfield+''''

exec(@strfield)
GO
如上
执行exec(@strfield)时报错:
服务器: 消息 170,级别 15,状态 1,行 1
[Microsoft][ODBC SQL Server Driver][SQL Server]第 1 行: 'create table rcdfile_fwwjdj(id int identity,djh varchar (50),wh varchar (50),bt varchar (100),cwjg varchar (100),bcq datetime ,m' 附近有语法错误。
应该是把字符串截断了。怎么解决?
chenyuandxm 2004-11-22
  • 打赏
  • 举报
回复
列出你的具体问题?
liangx326 2004-11-22
  • 打赏
  • 举报
回复
哦???没见过!!顶顶看!!
学习!关注!

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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