set @sql='insert into '+@tn+ ' (LetterID,ThemeID,BBSUID,LetterContent) 
VALUES ('+@LetterID+','+@ThemeID+','+@BBSUID+','+@LetterContent+')' 
exec (@sql) 
这儿先print @sql打出来看看是那儿的问题,好像是你值没和字段对应上吧,@BBSUID应该是int的,但你的值是sdsddsdsdsd,传错了吧

解决方案 »

  1.   

    我的字段都是能对映上的,没有问题,主要就是我说的它自动将我的参数从nvarchar转换成int,因为我试过给@LetterContent赋‘123456’这种数字型是可以插进去的,而且‘08080001’插进去时变成‘8080001’自动将前面的‘0’略去,说明是将字符转换成整型插入的。
      

  2.   

    set @sql='insert into '+@tn+ ' (LetterID,ThemeID,BBSUID,LetterContent) 
    VALUES ('''+@LetterID+''','''+@ThemeID+''','''+@BBSUID+''','''+@LetterContent+''')' 
      

  3.   

    谢谢,3楼前辈,但为什么是两个单引号……,如果参数是bit,smalldatetime也可以这样写吗
      

  4.   

    在麻烦大家一次,和上面的差不多
    ALTER  PROCEDURE [dbo].[OLTR_BBSLetter08Update] (
    @LetterID nvarchar(30),
    @ThemeID nvarchar(30),
    @BBSUID nvarchar(30),
    @LetterContent nvarchar(3000),
    @AddTime smalldatetime,
    @IsDigest bit,
    @Reply bit,
    @NoShow bit,
    @Re1 nvarchar(30),
    @Re2 nvarchar(30)
    )
    ASSET NOCOUNT ON
     DECLARE 
    @tn varchar(100),
    @sql varchar(4000),
    @yy nvarchar(30) 
       set @yy=getdate()
       set @yy=substring(@yy,9,2)+0
       if(@yy=8)
       begin
       set @tn='OLTR_BBSLetter0'+@yy
            end
       else
       begin
       set @tn='OLTR_BBSLetter'+@yy
       end
    set @sql='UPDATE '+@tn+' SET
    [ThemeID] ='+ @ThemeID+',
    [BBSUID] ='+ @BBSUID+',
    [LetterContent] ='+ @LetterContent+',
    [AddTime] ='+@AddTime+', [IsDigest] ='+@IsDigest+', [Reply] ='+@Reply+' ,[NoShow] ='+@NoShow+', [Re1] ='+ @Re1+', [Re2] ='+ @Re2+'
    WHERE
    [LetterID] ='+ @LetterIDexec (@sql)我用  exec [dbo].[OLTR_BBSLetter08Update] '08080005','08080003','08080003','abcdefg,'2008-9-18','0','1','1','',''试验 
    提示我  ‘对数据类型而言运算符无效。运算符为 add,类型为 bit。‘ 
            ’从字符串转换为 smalldatetime 数据类型时发生语法错误。’
    应该怎么解决