【问题标题】:SQL Server - Inserting default values bcpSQL Server - 插入默认值 bcp
【发布时间】:2015-11-11 05:21:36
【问题描述】:

在 SQL Server 中,如何在使用bcp 命令时插入默认值?

场景来自下表,在运行bcp 命令时,'sno' 列是标识列,其中值应自动递增 1,values 列的数据应来自数据文件,date 列的值应自动更新为今天的日期,状态列的值应更新为Flag1

对于正常使用,我知道如何创建bcp 格式文件。对于上述场景,如何创建一个格式文件并插入数据到table1?

表格格式:

CREATE TABLE [dbo].[table1] 
(
    SNo int IDENTITY(1,1) NOT NULL,
    values  varchar(13) NOT NULL,
    date    datetime NOT NULL,
    status  varchar(50)
)

Table1:

sno  |  values  |    date    |  status
-----+----------+------------+--------
1    |  111111  | 2015-08-17 |  Flag1
2    |  222222  | 2015-08-17 |  Flag1

【问题讨论】:

  • 旁注:不要将您的列称为date - 首先,它是一个保留关键字(用于数据类型) 在 SQL Server 2008 和更新版本中,其次,它没有表现力 - 它是什么日期?使用更有意义的东西——OrderDateHireDate——任何东西——不仅仅是date本身……(同样适用于valuesstatus……)
  • 这里:让我为您搜索一下。我接受了你的问题,这是第一个结果。 msdn.microsoft.com/en-us/library/ms186335.aspx

标签: sql-server identity bcp


【解决方案1】:

基本上,您只需将0 作为主机列号,以避免bcp 插入列。

所以假设你的[date] 列有一个默认约束:

ALTER TABLE dbo.table1
ADD CONSTRAINT DF_Table1_Date DEFAULT(SYSDATETIME()) FOR [Date]

不知何故,您还设置了一些方法来计算 [status] - 然后您可以使用此格式文件:

12.0
4
1    SQLCHAR         0    12   ";"      0    SNo        ""
2    SQLCHAR         0    13   ";"      2    values     SQL_Latin1_General_CP1_CI_AS
3    SQLDATETIME     0    24   ";"      0    date       ""
4    SQLCHAR         0    50   "\r\n"   0    status     SQL_Latin1_General_CP1_CI_AS

因此您实际上只导入了[values] 列-SNo 由 SQL Server 自动设置(身份列),[date] 列通过默认约束自动设置为当前日期和时间- 现在你必须想办法在插入时或插入后填写[status] 列!

【讨论】:

    猜你喜欢
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2018-03-21
    • 2020-04-22
    • 2017-11-30
    • 2021-11-20
    相关资源
    最近更新 更多