【问题标题】:Insert into sql temp table with a default column插入带有默认列的 sql 临时表
【发布时间】:2013-07-02 09:26:10
【问题描述】:

我正在 tsql 中创建一个临时表,其中 1 列的默认值如下:

DECLARE @MyTable Table (MyName varchar(40) Primary Key not null, Updated SmallInt NULL DEFAULT 0)

当我运行插入语句时,我收到“列名或提供的值的数量与表定义不匹配”的错误。但第二列是假设获得默认值,我不想指定。有什么解决方法吗?

INSERT @MyTable 
VALUES ('Value1'),
       ('Value2')

【问题讨论】:

  • 您发布的 INSERT 语句是什么?
  • Jenny:我不确定我是否理解您的问题,但 INSERT 语句正在使用值填充临时表。那就是导致错误的语句。
  • 对不起,我不知道这个语法。
  • @user1208908 您有 2 列 MyName 主键和一个已更新,表具有主键并不意味着该列将被填充。只有身份列会自动填充。

标签: tsql insert temp-tables


【解决方案1】:

您需要指定获得值的列,而忽略那些没有获得值的列:

INSERT @MyTable (MyName) VALUES ('Value1')

【讨论】:

    【解决方案2】:

    使用列列表

    INSERT @MyTable (MyName)
    VALUES ('Value1'),('Value2')
    

    或根据@AlexK 的回答使用 DEFAULT 关键字

    使用列列表允许表定义有所改变(比如添加另一个默认列)而不更改 INSERTS

    【讨论】:

      【解决方案3】:

      检查您的语法 - 您似乎有太多的左括号和右括号,这就是您遇到该错误的原因。我认为它应该看起来更像这样:

      INSERT INTO @MyTable 
      VALUES ('Value1','Value2')
      

      或者,正如其他人所提到的,您也可以尝试指定列:

      INSERT INTO @MyTable (col1, col2)
      VALUES ('Value1','Value2')
      

      【讨论】:

        【解决方案4】:

        你需要使用DEFAULT关键字;

        INSERT @MyTable 
        VALUES ('Value1', DEFAULT),
               ('Value2', DEFAULT)
        

        【讨论】:

          猜你喜欢
          • 2018-02-06
          • 1970-01-01
          • 1970-01-01
          • 2018-03-02
          • 1970-01-01
          • 1970-01-01
          • 2020-12-11
          • 2011-02-05
          • 2011-08-21
          相关资源
          最近更新 更多