AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[bcp](dba)

Martin Hope
kevinnwhat
Asked: 2022-04-09 10:32:19 +0800 CST

BCP 通过视图插入与手动插入

  • 2

考虑以下代码

use tempdb
go

drop table if exists ImportTest1;
create table ImportTest1 (
 Column1    int null,
 Column2 int null,
 NewColumn int null
);
insert into ImportTest1 select 1,2,3 union select 4,5,6;
select * from ImportTest1;

drop table if exists DestinationTest1;
create table DestinationTest1 (
Column1 int null,
Column2 int null
);
select * from DestinationTest1;
GO

CREATE OR ALTER VIEW TestView1 AS 
SELECT Column1 AS Column1, Column2 AS Column2, NULL AS NewColumn FROM DestinationTest1
GO

如果我们运行这个

INSERT INTO TestView1 (Column1, Column2, NewColumn)
SELECT Column1, Column2, NewColumn FROM ImportTest1

它失败并出现错误

Update or insert of view or function 'TestView1' failed because it contains a derived or constant field.

但是,如果我通过 BCP 做同样的事情,它工作正常

BCP "SELECT Column1, Column2, NewColumn FROM tempdb..ImportTest1" QUERYOUT C:\BCPTest\test.txt -T -c -t,

BCP tempdb..TestView1 IN C:\BCPTest\test.txt -T -c -t,

这里发生了什么,允许 BCP 通过视图成功导入,但我们不能手动运行它?

sql-server bcp
  • 1 个回答
  • 42 Views
Martin Hope
Joe
Asked: 2022-04-06 10:34:45 +0800 CST

如何在 SQL Server 中具有索引视图的表上使用 bcp in

  • 4

我正在使用 SQL Server 2017,并希望在脚本中使用“bcp in”来填充多个数据库中的表。我无法将数据导入具有索引视图的表中。以下是重现我的问题的 MCVE:

  1. 运行本文末尾的脚本,用两个表、一个索引视图和一些数据填充一个测试数据库。

  2. 运行bcp out将表 Table1 中的测试数据导出到文件中:

bcp [dbo].[Table1] out .\Table1.bcp -S "localhost" -d TestDB -T -k -N
  1. 从表1中删除测试数据:
DELETE FROM [dbo].[Table1]
  1. 尝试使用bcp in将数据导入 Table1 :
bcp [dbo].[Table1] in .\Table1.bcp -S "localhost" -d TestDB -T -k -N

结果:失败并显示错误消息INSERT failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'...

注意:如果我在视图上删除索引 [ix_v1],这将成功:只有在索引视图引用表时才会出现问题。

  1. 尝试使用带有 -q 开关的bcp in将数据导入 Table1 :
bcp [dbo].[Table1] in .\Table1.bcp -S "localhost" -d TestDB -T -k -N -q

结果:失败并显示错误消息Invalid object name '[dbo].[Table1]'

  1. 尝试通过指定不带 [] 分隔符的表名并使用 -q 开关将数据导入 Table1:
bcp dbo.Table1 in .\Table1.bcp -S ".\SqlExpress17" -d TestDB2 -T -k -N -q

结果:数据成功导入。但是,这不符合我的要求,因为我想要一个通用脚本,它也可以处理需要分隔符的表名(例如[dbo].[My Table])。

问题:有没有办法使用 bcp 将数据导入具有索引视图的表中,同时在 bcp 命令行上指定一个分隔的、模式限定的表名?

填充空数据库 TestDB 的脚本

USE [TestDB]
GO
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Table1](
    [Table1Id] [int] NOT NULL,
    [Table1Name] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED ( [Table1Id] ASC)
 )
GO
CREATE TABLE [dbo].[Table2](
    [Table2Id] [int] NOT NULL,
    [Table2Name] [nvarchar](50) NOT NULL,
    [Table1Id] [int] NULL,
CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED (  [Table2Id] ASC)
)
GO
CREATE VIEW [dbo].[v1] WITH SCHEMABINDING
AS
    SELECT 
    T1.Table1Id, T1.Table1Name,
    T2.Table2Id, T2.Table2Name
    FROM [dbo].[Table1] T1 INNER JOIN [dbo].[Table2] T2
    ON T1.Table1Id = T2.Table1Id
GO
CREATE UNIQUE CLUSTERED INDEX [ix_v1] ON [dbo].[v1] (Table1Name, Table2Name)
GO
INSERT INTO Table1
VALUES 
 (1, 'One')
,(2,'Two')
sql-server bcp
  • 1 个回答
  • 242 Views
Martin Hope
owl
Asked: 2021-02-18 06:30:37 +0800 CST

从 Control-M 执行时,BCP 无法读取在同一事务中创建的表

  • 0

当原始进程为 BCP 锁定表时,如何使用 BCP 导出全局临时表?我们创建了自己的导出过程,我们在其中提供 SELECT 或 table_name,过程将数据存储到全局临时表,然后 BCP 实用程序将其导出。它运行良好,但是当我们从 BMC 的 Control-M 系统运行它时,表上有模式修改锁,过程只是等待自己解锁。静态表对我们来说不是一个好的解决方案。

我们尝试在全局临时表的所有列上使用例如自链接链接服务器或索引。

我们目前的建议是将导出添加到队列中,然后由另一个进程异步导出。

sql-server bcp
  • 1 个回答
  • 76 Views
Martin Hope
user2741663
Asked: 2018-06-06 21:17:50 +0800 CST

如何删除bcp.exe中打开的文件

  • 0

我在查询窗口中运行了 bcp 命令来生成 tsv 文件。中间我取消了查询。我试图杀死 SPID。但它被杀死/回滚。

我试图删除服务器中的 tsv 文件。它抛出错误,因为“文件无法删除,因为它在 bcp.exe 中打开”。请协助解决

sql-server bcp
  • 1 个回答
  • 689 Views
Martin Hope
trench
Asked: 2016-10-13 09:13:12 +0800 CST

BCP 每批将更多行导出到文件(查询输出)

  • 7

我正在使用 Windows 10 并直接从命令提示符(管理员)运行它。有没有办法改变输出到文本文件的行数?

BCP "SELECT * FROM db.dbo.table WHERE row_date = '2016-10-11'" queryout "C:/Users/table.csv" -t, -c -S "servername" -T

1000 rows successfully bulk-copied to host-file. Total received: 1000
1000 rows successfully bulk-copied to host-file. Total received: 2000
1000 rows successfully bulk-copied to host-file. Total received: 3000
1000 rows successfully bulk-copied to host-file. Total received: 4000
1000 rows successfully bulk-copied to host-file. Total received: 5000
1000 rows successfully bulk-copied to host-file. Total received: 6000


12136 rows copied.
Network packet size (bytes): 4096

然后我尝试了 -b 5000 和 -b10000:

BCP "SELECT * FROM db.dbo.table WHERE row_date = '2016-10-11'" queryout "C:/Users/table.csv" -t, -c -b 5000 -S "servername" -T

但它仍然输出 1000 行。我尝试使用 -a 增加数据包大小,但这根本没有影响。

sql-server bcp
  • 1 个回答
  • 5337 Views
Martin Hope
trench
Asked: 2016-10-12 06:15:17 +0800 CST

从 MS SQL Server 中提取大量数据的 BCP 代码

  • 0

自 6 月以来,我一直在使用 Python 执行 SQL 查询并每天检索前一个日期的数据,并将其加载到本地的 Postgres 数据库中。每个日期大约有 200 万行和 75 列左右,因此它相当大,需要一段时间才能拉出。

有人可以给我一个生成 CSV(逗号)文件的示例 bcp 代码吗?我一次可以提取多少数据,或者我可以循环遍历 SELECT 语句中的每个日历日期?我希望这将是一种更快的方法来复制我感兴趣的表。

我的 Python 代码基本上归结为 SELECT * FROM table_name WHERE report_date = {}。报告日期通常是昨天。

如果其他人都偶然发现,这是我的最终工作结果。subprocess.run 执行包含 BCP 查询的字符串。在下面的代码中,有一些变量,例如 table_name、数据库名称和查询日期,因为我在不同日期循环访问不同的表和数据库。

path = 'C:/raw/'
filename = '{}_{}.csv'.format(database, select_database(database)[table_int])
query = '"SELECT * FROM {}.dbo.{} WHERE row_date = \'{}\'"'.format(database, select_database(database)[table_int], query_date)
command = 'BCP {} queryout \"{}\" -t, -c -S "server_name" -T'.format(query, os.path.join(path, filename))
table_name = 'raw_{}_{}'.format(select_database(database)[table_int], database)
logger.info(command)
subprocess.run(command)
sql-server bcp
  • 2 个回答
  • 4412 Views
Martin Hope
Paul Gibson
Asked: 2015-01-13 11:23:32 +0800 CST

BCP 不保留关系数据

  • 1

我在本地计算机(SQLServer Express 和 VS Express)上开发了一个文档跟踪数据库和前端 C#/.NET 应用程序。一旦它开始工作并可用,我让我们的 IT 分支在主服务器上安装数据库 (SQL Server Express),并将应用程序指向它而不是我的本地版本。然后我使用 bcp 从我的盒子中导出并导入到服务器。我注意到现在亲子关系都破裂了。每个表都有一个名为 UID 的标识列,它在子表中被引用。但是 UID 并没有像在我的机器上那样复制,而是在插入时全部重新创建。我还没有找到任何有关处理此问题的正确方法的文档,但现在数据基本上无法使用。我可以很容易地重做 BCP,但是有人能指出我的错误吗?

这是我用于导出的内容(数据和格式以防万一):

bcp DocControl.dbo.Documents out Documents.dat -n -S MYMACHINE\SQLEXPRESS -T
bcp DocControl.dbo.Documents format nul -T -n -f Documents.fmt -S MYMACHINE\SQLEXPRESS

对于导入(另外,在导入之前我已经复制了模式,所以表、键和存储过程都是提前重新创建的,但没有数据):

bcp DocControl.dbo.Documents in Documents.dat -n -S SERVER\SQLEXPRESS -T

这只是针对其中一张表,但其他表的完成方式完全相同。现在 Documents 表 UID 从 1 开始上升,而以前它从 380 开始上升。因此,子表中的引用 ID 不再指向正确的父表。

sql-server bcp
  • 1 个回答
  • 138 Views
Martin Hope
Agony
Asked: 2012-08-26 04:06:05 +0800 CST

xp_cmdshell bcp 不会保存文件

  • 0
EXEC xp_cmdshell 'bcp "SELECT lastconnectip FROM RF_USER.dbo.tbl_UserAccount" queryout "C:\test.txt" -T -c' 

上面的命令运行,输出:

NULL
Starting copy...
1000 rows successfully bulk-copied to host-file. Total received: 1000
NULL
1158 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 1      Average : (1158000.00 rows per sec.)
NULL

但实际上没有写入文件。我错过了什么?用户确实拥有 SQL 2008 R2 的完全权限 (sysadmin)。

在 sql 查询/触发器中使用 NETSH 的另一种方法也可以代替上述方法。

bcp
  • 2 个回答
  • 3775 Views
Martin Hope
User13839404
Asked: 2012-02-17 10:49:46 +0800 CST

如何从根驱动器运行 bcp 实用程序?

  • 3

我的机器没有安装完整的 SQL Server。我的机器上安装了以下可分发包:-

  1. Microsoft® SQL Server® 2008 R2 命令行实用程序
  2. Microsoft® SQL Server® 2008 R2 本机客户端

我有一个运行 bcp 实用程序的批处理文件。如果我从 bcp.exe 所在的文件夹(...tools\binn)运行这个批处理文件,它就可以工作。

我的转储问题是,是否有任何方法可以仅从 c:\ 驱动器运行 bcp 实用程序。现在,如果它从 c:\ 驱动器运行,它会说:-

bcp 未被识别为内部或外部命令,..

sql-server-2008 bcp
  • 3 个回答
  • 10345 Views
Martin Hope
Sako73
Asked: 2011-09-09 10:32:05 +0800 CST

运行 Sql Server BCP.exe 实用程序的最低要求

  • 5

我正在与需要将数据导入到远程 SQL Server (2008) 实例的客户合作。将执行导入的计算机上不能安装 SQL Server。BCP.exe 实用程序可以在没有安装 SQL Server 的情况下运行吗?

谢谢你的帮助。

sql-server bcp
  • 2 个回答
  • 14738 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve