【发布时间】:2020-01-10 09:12:01
【问题描述】:
我使用bcp %database%.MyTable out MyTable.dmp -n -T -S %sqlserver% 导出了一个表(使用 EF Core 2.2 创建)。
使用bcp %database%.MyTable in MyTable.dmp -n -T -S %sqlserver% 重新导入它时出现此错误:
SQLState = 37000, NativeError = 1934
Error = [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]INSERT failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.
表是用QUOTED_IDENTIFIER = ON创建的,不包含任何computed column:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [MyTable](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[OwnerLoginId] [bigint] NOT NULL,
[RowVersion] [timestamp] NULL,
[CreatedAt] [datetime2](7) NOT NULL,
[DataId] [bigint] NOT NULL,
[SomeString] [nvarchar](30) NOT NULL,
[AnotherString] [nvarchar](30) NULL,
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [MyTable] WITH CHECK ADD CONSTRAINT [FK_MyTable_SomeOtherTable_DataId_SomeString] FOREIGN KEY([DataId], [SomeString])
REFERENCES [SomeOtherTable] ([DataId], [SomeString])
GO
ALTER TABLE [MyTable] CHECK CONSTRAINT [FK_MyTable_SomeOtherTable_DataId_SomeString]
GO
ALTER TABLE [MyTable] WITH CHECK ADD CONSTRAINT [FK_MyTable_DataTable_DataId] FOREIGN KEY([DataId])
REFERENCES [DataTable] ([Id])
GO
ALTER TABLE [MyTable] CHECK CONSTRAINT [FK_MyTable_DataTable_DataId]
GO
【问题讨论】:
-
SET QUOTED_IDENTIFIER是一个连接属性。听起来您默认使用SET QUOTED_IDENTIFIER OFF进行连接。尝试添加-q开关。 -
@Lamu 那么我应该把
-q. I get放在哪里?输入、输出或格式选项都需要有效的表名。`无论我把-q放在哪里。 -
“不能让它工作。” 这是什么意思?什么是错误或意外行为。 “不起作用”并不能告诉我们任何事情。
-
@gumo,您应该可以在位置参数之后的任何位置指定
-q选项。我希望这会起作用:bcp %database%.MyTable in MyTable.dmp -q -n -T -S %sqlserver% -
@gumo,似乎
-q和不符合常规标识符命名的数据库名称的组合是问题所在。我会尽快发布答案。
标签: sql-server bcp sql-server-2017