0

我想将标量变量的结果发送到文本文件中,

我的代码看起来像这样

 DECLARE @test varchar(10)

 SET @test='This is sample text'

 EXEC master..xp_cmdshell'bcp ' + @test + ' queryout "D:\sample.txt" -S LocalHost -U 
 sa -P 123 -c  -T -t' 

但这显示了以下错误

 output
 usage: bcp {dbtable | query} {in | out | queryout | format} datafile
 [-m maxerrors]            [-f formatfile]          [-e errfile]
 [-F firstrow]             [-L lastrow]             [-b batchsize]
 [-n native type]          [-c character type]      [-w wide character type]
 [-N keep non-text native] [-V file format version] [-q quoted identifier]
 [-C code page specifier]  [-t field terminator]    [-r row terminator]
 [-i inputfile]            [-o outfile]             [-a packetsize]
 [-S server name]          [-U username]            [-P password]
 [-T trusted connection]   [-v version]             [-R regional enable]
 [-k keep null values]     [-E keep identity values]
 [-h "load hints"]         [-x generate xml format file]
 NULL

不知道如何在 bcp 命令中给出分配标量变量值的格式 请任何人帮助。

并以这种方式尝试过

  Create table #sample
  (
   productid int
  )

  Insert into #sample(productid) values(1001098)

  EXEC master..xp_cmdshell'bcp "select * from #sample" queryout "D:\sample.txt" -S 
  LocalHost -U sa -P 123 -c  -T -t' 

它给出了错误

   #sample does not exist (in bcp command line) 

任何人都可以解决这个问题。提前致谢。

4

2 回答 2

0

首先,临时表绑定到范围,因此不能在不同的进程 ID 中使用。

但是,您可以声明一个全局临时表(请务必在之后将其删除,并确保使用非常具体的名称以确保您不会干扰其他代码)。

为此,您只需将表名中的“#”加倍。

if object_ID('tempdb..##sample') is not null
    drop table ##sample

Create table ##sample
(
 productid int
)

Insert into ##sample(productid) values(1001098)

那么你所要做的就是你的输出。

EXEC master..xp_cmdshell'bcp "select * from ##sample" queryout "d:\sample.txt" -w -U sa -P 123 -S server_name\instance_name' 

如您所见,我也更改了几个开关。我发现最好使用 -w 来生成 ansi 字符,所以我删除了 -c。-T 用于受信任的连接,但由于您提供了用户名和密码,因此您不需要它。

那你应该没事。

于 2012-10-23T01:10:59.010 回答
0

测试这个:

EXEC xp_cmdshell 'bcp "SELECT *FROM [YOURDATABASE].[dbo].[YOURTABLE]"  queryout "f:\newOUTPUT.txt" -S DESKTOP-A5CFJSH\MSSQLSERVER1 -UYOURUSERNAME -PYOURPASSWORD -n '
于 2015-12-06T05:33:28.657 回答