我正在使用MS SQL Server 2016 SP2。
我有一个包含两列的表格:
Filename XML
--------- --------------------
c:\myfolder\test.xml <?xml version blah blah blah
c:\myfolder\test2.xml <?xml version blah blah blah
c:\myfolder\test3.xml <?xml version blah blah blah
使用SQL,我想导出XML
列中的XML并从Filename
列中创建文件。我尝试使用游标和BCP,如下所示,但我不断收到消息:
复制方向必须为“输入”,“输出”或“格式”。用法:bcp {dbtable |查询}出|查询输出格式}数据文件
这是我的SQL-我在哪里出错?
感谢您的帮助。
DECLARE @name VARCHAR(MAX)
DECLARE db_cursor CURSOR FOR
SELECT [Filename] FROM Instances
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @NAME
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC xp_cmdshell 'bcp -S xxxxxxx -d xxxxxxxxx "SELECT [XML] FROM Instances WHERE [Filename] = @NAME" -o @NAME -T -c -t -x'
FETCH NEXT FROM db_cursor INTO @NAME
END
CLOSE db_cursor
DEALLOCATE db_cursor
答案 0 :(得分:2)
复制方向必须为“输入”,“输出”或“格式”。用法:bcp {dbtable |查询}出|查询输出格式}数据文件
原因:
queryout
@Name
变量错误地注入了动态sql。调整后的xp_cmdshell
命令:
EXEC xp_cmdshell 'bcp "SELECT CAST([XML] as XML) FROM Instances WHERE [Filename] = '+@NAME+'" queryout "'+@NAME+'" -S"xxxxxxx" -d"xxxxxxxxx" -c -T'
如果传出文件预期位于UNICODE中,则可以添加以下额外的开关:-w