sql server 2008中的BCP实用程序 - 过程需要varchar类型的参数'no_output'

时间:2013-06-26 15:20:14

标签: sql-server csv bcp

我正在尝试使用bcp实用程序将所有数据库表的列名导出到csv文件,以便稍后与合并到一个文件中的表中的数据合并,并将检索到的列名称作为文件中的标题。 / p>

我在这个问题的答案中复制了代码:export table to file with column headers (column names) using the bcp utility and SQL Server 2008。 但是我收到了这个错误:

  

消息214,级别16,状态201,过程xp_cmdshell,第1行过程   期望'varchar'类型的参数'no_output'。

这是我的代码:

DECLARE @var NVARCHAR(MAX)

DECLARE curRunning
CURSOR LOCAL FAST_FORWARD FOR
SELECT name FROM sysobjects WHERE type = 'U'

OPEN curRunning

FETCH NEXT FROM curRunning INTO @var

WHILE @@FETCH_STATUS = 0
BEGIN
     DECLARE @Exec2 NVARCHAR(MAX),@sql1 VARCHAR(1000)
     SET @sql1 ='"DECLARE @colnames VARCHAR(max);SELECT @colnames= COALESCE(@colnames + '+''','''+' , '''') + column_name from dbname.INFORMATION_SCHEMA.columns where TABLE_NAME='+@var+'; select @colnames;"'
     SET @Exec2 = 'exec master.dbo.xp_cmdshell ''bcp '+@sql1+' queryout "C:\migration\HeadersOnly'+@var+'.csv" -c -k -T -t,'''
     PRINT @Exec2
     EXECUTE sp_executesql @Exec2
FETCH NEXT FROM curRunning INTO @var
END

CLOSE curRunning
DEALLOCATE curRunning

2 个答案:

答案 0 :(得分:2)

您不能将varchar(max)与xp_cmdshell一起使用。

尝试1到8000之间的数字。

varchar(max)的容量为2GB&在后台作为TEXT数据类型工作,所以它不好

您需要使用VARCHAR(256)或类似内容,最多可使用VARCHAR(8000)

答案 1 :(得分:1)

在您的代码中:

  

设置@ Exec2 ='exec master.dbo.xp_cmdshell''bcp'+ @sql1 +   'queryout'C:\ migration \ HeadersOnly'+ @ var +'。csv“-c -k -T -t,'''

最后有一个逗号(,):

-t,'''

告诉xp_cmdsheel,应该有下一个参数。该参数是[NO OUTPUT]。如果您不打算提供该参数,请删除逗号。

参考:xp_cmdshell (Transact-SQL)