构造带变量的命令语句如下:exec master..xp_cmdshell 'bcp SAYSIM..NV_order out '+@outputAddress+' -c -t , -S .\SQLEXPRESS -U saysim -P bennie'具体如下:declare @i int
set @i=1
declare @inputAddress varchar(150)  --导入文件的地址
declare @outputAddress varchar(150) --导出文件的地址
declare @name varchar(30)          --txt文件名称
while(@i<=3)          --(38437 row(s) affected),temp表中有38437条地址记录
begin --以空格为分隔符,导入txt文档到temp表中,并排序
set @inputAddress=(select txtPath from allPath where id=@i)
set @inputAddress='D:\实验室\workplace\SAYSIM\SimByWord\'+@inputAddress
EXEC('bulk insert temp from '''+@inputAddress+''' with (fieldterminator='' '') ') --获得当前文件名称
select @name=(select substring(txtPath,6,Len(txtPath)-9) from allPath where id=@i)

--导出temp表到txt后,删除temp表数据
set @outputAddress='D:\实验室\workplace\SAYSIM\SimByWordOrder\'+@name+'.txt'
exec master..xp_cmdshell 'bcp SAYSIM..NV_order out '+@outputAddress+' -c -t , -S .\SQLEXPRESS -U saysim -P bennie'
delete from temp
set @i=@i+1
end会报如下错误:
Msg 102, Level 15, State 1, Line 19
'+' 附近有语法错误。
请问到底如何构造带变量的命令语句?我尝试了万多次都有错误,希望各位帮帮忙,万分感谢!!

解决方案 »

  1.   

    试试
    exec('exec master..xp_cmdshell ''bcp SAYSIM..NV_order out '+@outputAddress+' -c -t , -S .\SQLEXPRESS -U saysim -P bennie'' ')
      

  2.   


    万分感谢,好像可以了。请问怎么构造的?为什么bcp前有两个单引号??完全没懂?
      

  3.   

    PRINT('exec master..xp_cmdshell ''bcp SAYSIM..NV_order out '+@outputAddress+' -c -t , -S .\SQLEXPRESS -U saysim -P bennie'' ')
    你这样看一下就明白了,或网站上搜索,动态SQL语法
      

  4.   

    那能否在
    EXEC('bulk insert temp from '''+@inputAddress+''' with (fieldterminator='' '') ') 
    也就是从txt导入表中时,排序后再导入表中呢?
      

  5.   

    可以的
    EXEC('bulk insert temp from '''+@inputAddress+''' with (fieldterminator='' '',ORDER (你要排序的字段名字 ASC|DESC)) ')
      

  6.   


    我这样构造的:
    EXEC('bulk insert temp from '''+@inputAddress+''' with (fieldterminator='' '',ORDER (matchPercent ASC)) ')
    可是结果并没有排序。哪里错了?
      

  7.   

    ORDER ( { column [ ASC | DESC ] } [ ,... n ] )
    指定数据文件中的数据如何排序。如果将加载的数据根据表的聚集索引进行排序,则可以提高大容量加载操作的性能。如果数据文件以不同的顺序排序,或表中没有聚集索引,则 ORDER 子句将被忽略。提供的列名必须是目标表中有效的列。默认情况下,大容量插入操作假设数据文件未排序。
      

  8.   

    你是不是select * from 你的表 发现记录出来不排序
    其实是这样的。
    表中的顺序是由你的表中含有聚集索引的列的顺序决定的
    如果你指定的那个列名和顺序和你实际表中的含有聚集索引的列名和顺序是一致的话 你的插入性能就能得到提高。
    所以我们说 这里BULK INSERT 插入指定列顺序也是有上面这个前提的。至于你select的出来的列顺序 是要靠你的聚集索引列 或者 自己ORDER BY 字句指定的
      

  9.   

    http://apps.hi.baidu.com/share/detail/2768876
    有问题一次说清楚好点,参考上面的吧,导入导出大全