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' 附近有语法错误。
应该是把字符串截断了。怎么解决?

解决方案 »

  1.   

    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)各位帮忙看看这个有没有错误。谢谢了!
      

  2.   

    不明白.看一半天还是不明白.帮你顶顶nvarchar支持4000的长度.应该不是这个原因.
    你把create 的句子直接写出来,看能否建立不就可以知道它支持与否.
    再者试试把你的动态句子打出来看看,句子是否正确....
      

  3.   

    你在exec(@strfield),这句话之前先把@strfield变量输出,执行看有无错误。只要变量长度小于4000,应该不会出现截断字符串的情况。