存储过程: 
CREATE PROCEDURE hot_input_test33 
@str_t char(11), 
@str_f char(150) 
as 
set nocount on 
declare @str1 as char(11) 
select @str1='GMM'+cast(rand()*1000000 as char(8))                                      --临时使用的表,gmm后面的数字随机生成 -----表不存在,则新建一张表 
if not exists (select * from sysobjects where id = object_id(''+@str_t+'') and OBJECTPROPERTY(id, N'IsUserTable') = 1) 
begin 
exec('create table ['+@str_t+']([hi_device] int,[hi_time] datetime,[hi_mmmi] char(15),[hi_iiii]  char(15))' ) 
end 
---- 
exec('create table ' +@str1+'([hi_device] int,[col002] varchar(255),[col003] varchar(255),[hi_time] datetime, 
      [hi_mmmi] char(15),[hi_iiii] char(15),[col7] varchar(255))')                    ---建临时使用的表 
exec ('master..xp_cmdshell  '+''''+' bcp test..'+@str1+' in "'+@str_f+'" -c -t"," -SHZGA-LWM -Usa -P55555'+'''') 
                                                                                      --将数据导入临时表 
exec('insert into ['+@str_t+'] select [hi_device],[hi_time],[hi_mmmi],[hi_iiii] from  ['+@str1+']')          --从临时表取数据存入数据库中的表中(表有则追加) 
exec('drop table ['+@str1+']')                                                              --删除临时使用的表 set nocount off 
GO 
--exec hot_input_test 'gsm20090101','C:\Documents and Settings\hzga\桌面\数据导入程序\原始数据文件\20090101_6.dat' 测试没有问题,成功。 
但是在VB中调用它,老是报错:《实时错误'-2147217900(80040e4)' 第1行'.5' 附近有语法错误》然后程序中断。 不知道是怎么回事?请高人指点。

解决方案 »

  1.   

    存储过程中的 
    exec('insert into ['+@str_t+'] select [hi_device],[hi_time],[hi_mmmi],[hi_iiii] from  ['+@str1+']') 
    我后来做了修改: 
    exec('insert into ['+@str_t+'] select cast([hi_device] as int),cast([hi_time] as datetime),cast([hi_mmmi] as char(15)),cast([hi_iiii] as car(15)) from  ['+@str1+']') 还是出现之前的错误。 
      

  2.   

    我在那里问了:NO body answer my question.
      

  3.   

    declare @str1 as char(11)  多了as
      

  4.   

    把路径变量改成varchar并在路径中不要写空格试试
      

  5.   

    vb调用可执行文件的路径不能有空格的吧,Documents and Settings。
    改到指定盘符下试试。
      

  6.   

    select @str1='GMM'+cast(rand()*1000000 as char(11))  
    是用set还是select  ?
      

  7.   

    问题我找到了,是@str1='GMM'+cast(rand()*1000000 as char(11)) 这里出的问题,随机浮点数取值作为表名的时候带有小数点不合法所以就有报错了。
    谢谢各位的帮忙  ^_^  ^_^  ^_^