使用“按Select语句插入”的动态SQL命令出错

时间:2011-04-26 12:18:05

标签: sql-server-2005

我正在使用此过程从不同的表中选择值(每个表每周一次)并将它们插入一个临时表中,并通过选择过程结束时的表格将它们作为输出...

CREATE proc salessample (@tablename varchar(50), @did varchar(50))      
as      
begin      
   create table #salesdetail(sno int identity, This_Week_Left float,
                             This_Week_Right float, Last_Week_Left float, 
                             Last_Week_Right float, Paid_Left float,
                             Paid_Right float, Paid float, orbitrate float)      

DECLARE @SQLString NVARCHAR(500), @i int;
DECLARE @SQLString2 NVARCHAR(500);      

set @i=1      

--while(@i < 2)      
--begin      

set @SQLString = N'insert into #salesdetail(This_Week_Left,This_Week_Right,Last_Week_Left,Last_Week_Right,Paid_Left,Paid_Right,Paid,orbitrate) select a.This_Week_Left,a.This_Week_Right,a.Last_Week_Left,a.Last_Week_Right,a.Paid_Left,a.Paid_Right,a.Paid,b.orbitrate from Power.Week_'+@tablename +'_table a, Power.Orbit_Rates b where a.m_distributor_id ='+@did+' and b.week_details ='+convert(numeric(18),@tablename);      

exec  sp_executesql @SQLString      

set @i =@i + 1      

--end      

select * from #salesdetail      

end 

提前致谢。

2 个答案:

答案 0 :(得分:1)

您收到的错误消息是什么?你的问题目前无法回答。

据我所知,这可能是以下潜在问题之一:

  1. unicode(nvarchar)和非unicode(varchar)之间的转换
  2. 转换为数字,然后附加到字符串:

    ... and b.week_details ='+convert(numeric(18),@tablename);

  3. 转换为数字(18)
  4. 我看不到的其他一些插入错误
  5. 将动态SQL语句分解为多个部分,并在尝试exec之前查看它。即printselect字符串。你可以复制它并独立运行它以查看是否有任何问题。

    修改

    从下面的评论中,我可以看到您的问题是您正在将字符串转换为数字,然后尝试将其附加到字符串。试试这个:

    ... and b.week_details ='+ @tablename
    

答案 1 :(得分:0)

谢谢大家......所有答案和评论......

我清除了我的错误..

我忘了给Dyanmic命令中的where子句数据单引号...

像这样....

'''Text'''='文字'....

为什么我收到错误的原因是它接受参数并在程序中执行。 但不适用于所有价值观。我把表名作为输入。

现在正在努力。再次感谢s