[英]Formatting output in SQLCMD mode?
有没有办法在SQLCMD模式下指定输出文件格式,以便我可以使用BULK INSERT
读取它? 我想做这样的事情:
:CONNECT SERVER1
:OUT 'E:\test'
SELECT TOP 100 ID, NAME
FROM DB1.dbo.TABLE1
GO
:CONNECT SERVER2
:OUT 'E:\test2'
CREATE TABLE #TEMP(ID INT, NAME VARCHAR(100))
BULK
INSERT #TEMP
FROM 'E:\test'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
SELECT *
FROM DB2.dbo.TABLE2
WHERE ID IN (SELECT ID FROM #TEMP)
-- Other queries for #TEMP
GO
以下是使用sqlcmd生成CSV文件的一个很好的示例:
http://www.siusic.com/wphchen/sqlcmd-example-to-output-in-csv-format-350.html
sqlcmd
-S “ServerName” -U “UID” -P “PWD” -d “DBName”
-i “c:\input.txt”
-o “c:\output.txt”
-s “,”
-h -1
你可以使用SQLCmd /? 显示所有适用的参数。 ...参数-h -1指示实用程序不输出结果集标题。 参数-s“,”指示实用程序使用逗号作为列分隔符。
以某种自动化方式插入数据批量的一种方法是使用中间表。
(使用您的原始场景)
:CONNECT SERVER1
:OUT 'E:\test'
SELECT TOP 100 '^'+cast(ID as varchar(16))+'^^'+NAME
FROM DB1.dbo.TABLE1
GO
:CONNECT SERVER2
:OUT 'E:\test2'
CREATE TABLE #TEMP1(BOTHCOLUMNS VARCHAR(116))
BULK
INSERT #TEMP1
FROM 'E:\test'
GO
CREATE TABLE #TEMP2(ID INT, NAME VARCHAR(100))
INSERT #TEMP2
SELECT
Substring(BOTHCOLUMNS, 2, Patindex('%^^%', BOTHCOLUMNS) - 2),
Substring(BOTHCOLUMNS, Patindex('%^^%', BOTHCOLUMNS) + 2,
Len(BOTHCOLUMNS) - Patindex('%^^%', BOTHCOLUMNS) - 1)
FROM #TEMP1
WHERE Patindex('%^^%', BOTHCOLUMNS) > 1
SELECT t2.*
FROM DB2.dbo.TABLE2 t2
JOIN #TEMP2 tmp2 on tmp2.ID=t2.ID
-- Other queries for #TEMP
GO
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.