declare @ls_temp_tablename char(32) 
declare @ls_print varchar(100),@ls_print_z varchar(100),@ls_print_key varchar(100)
DECLARE authors_cursor CURSOR FOR  
SELECT DISTINCT tablename
FROM r_temptable
WHERE (isbill = 1)   ----
OPEN authors_cursor
FETCH NEXT FROM authors_cursor INTO @ls_temp_tablename
WHILE @@FETCH_STATUS = 0
BEGIN
set @ls_print ='delete from '+ rtrim(@ls_temp_tablename)  where  billdate<'2013-01-01'   
set @ls_print_z ='delete from  '+ rtrim(@ls_temp_tablename)+'_z'  where  billid in set @ls_print_key ='UPDATE as_tablekeys SET maxkey = SELECT isnull(MAX(billID), 0) + 1 FROM  rtrim(@ls_temp_tablename)  WHERE tablename =rtrim(@ls_temp_tablename) ' 
EXEC (@ls_print) 
EXEC (@ls_print_z)
exec (@ls_print_key)
FETCH NEXT FROM authors_cursor INTO @ls_temp_tablename
END
CLOSE authors_cursor
DEALLOCATE authors_cursor
请问里面的应该怎么使用+号,''号?
set @ls_print ='delete from '+ rtrim(@ls_temp_tablename)  where  billdate<'2013-01-01'   
set @ls_print_z ='delete from  '+ rtrim(@ls_temp_tablename)+'_z'  where  billid in set @ls_print_key ='UPDATE as_tablekeys SET maxkey = SELECT isnull(MAX(billID), 0) + 1 FROM  rtrim(@ls_temp_tablename)  WHERE tablename =rtrim(@ls_temp_tablename) ' 

解决方案 »

  1.   

    set @ls_print ='delete from '+ rtrim(@ls_temp_tablename)+' where  billdate<''2013-01-01'''   
      

  2.   

    表名、字段名不需要rtrim函数处理,+连接字符串,在变量前后各一个
    字符串内部的单引号用两个单引号表示,如''''代表一个单引号
    set @ls_print ='delete from '+@ls_temp_tablename+' where  billdate<''2013-01-01''' 
      

  3.   

    谢谢大家的回复:
    set @ls_print_z ='delete from  '+ rtrim(@ls_temp_tablename)+'_z'  where  billid in set @ls_print_key ='UPDATE as_tablekeys SET maxkey = SELECT isnull(MAX(billID), 0) + 1 FROM  rtrim(@ls_temp_tablename)  WHERE tablename =rtrim(@ls_temp_tablename) ' 请问这里的 _z应该怎么弄呢?
      

  4.   

    你这个_z是表名的一部分吗?还有where  billid in这里只有半句啊set @ls_print_z ='delete from  '+ rtrim(@ls_temp_tablename)+'_z  where  billid in '
    set @ls_print_key ='UPDATE as_tablekeys SET maxkey = (SELECT isnull(MAX(billID), 0) + 1 FROM  
    '+rtrim(@ls_temp_tablename)+'  WHERE tablename ='''+rtrim(@ls_temp_tablename)+''')'
      

  5.   

    _z是表的一部份
    set @ls_print ='delete from '+ rtrim(@ls_temp_tablename)  where  billdate<'2013-01-01'   set @ls_print_z ='delete from  '+ rtrim(@ls_temp_tablename)+'_z'  where  billid in ('select billid from '+ rtrim(@ls_temp_tablename)  where  billdate<='2013-01-01' )set @ls_print_key ='UPDATE as_tablekeys SET maxkey = SELECT isnull(MAX(billID), 0) + 1 FROM  rtrim(@ls_temp_tablename)  WHERE tablename =rtrim(@ls_temp_tablename) ' EXEC (@ls_print) 
    EXEC (@ls_print_z)
    exec (@ls_print_key)
      

  6.   


    set @ls_print_z ='delete from  '+ rtrim(@ls_temp_tablename)+'_z  
    where  billid in (select billid from '+rtrim(@ls_temp_tablename)+' where  billdate<=''2013-01-01'' )'
    set @ls_print_key ='UPDATE as_tablekeys SET maxkey = (SELECT isnull(MAX(billID), 0) + 1 FROM  
    '+rtrim(@ls_temp_tablename)+'  WHERE tablename ='''+rtrim(@ls_temp_tablename)+''')'
      

  7.   

    服务器: 消息 245,级别 16,状态 1,行 1
    将 varchar 值 '(SELECT isnull(max(billid), 0) +1  FROM   adjap WHERE tablename = ' 转换为数据类型为 int 的列时发生语法错误。
      

  8.   

     '(SELECT isnull(max(billid), 0) +1这里没有单引号吧
    看一下这条语句涉及的几个字段的数据类型,是否有不匹配的