【问题标题】:T Sql Column only fills with nullT Sql Column 只填充null
【发布时间】:2014-07-23 21:50:44
【问题描述】:

我们的团队遇到了一个问题,即存储过程没有用数据填充每一列。存储过程从视图中填充表。我们从视图中手动运行 select 语句,并且预期的数据就在那里。然而,当我们运行插入语句时,表格中间的三列填充了空值。

 Insert into Table2
 Select * from View1

未填充特定列。我们测试了几次。 Table2.Num1,Table2.Num2,Table2.Num3 中未填充的列。这些字段的所有值都为 null。

Select * from View1

所有数据都存在。 View1.Num1、View1.Num2、View1.Num3。这些 where nvarchar(16) 字段填充了数字数据。

Truncate Table2
Insert into Table2
Select * from View1

未填充的相同特定列。桌子的其余部分做得很好。

Created Table3 based on Table2.

Insert into Table3
Select * from View1

工作正常,所有数据都在那里。

有人知道为什么会发生这种情况吗?

要求提供额外信息

两个表之间的表结构是一样的。

有问题的特定列是 varchar(16)

created table3 是什么意思?

我们生成了 Create table2 语句,然后将其重命名为 Table3 并执行它。表 3 与表 2 相同。

表结构

这是用于创建 table2 的语句。除了更改表名外,table3 使用相同的 create 语句。该视图具有相同数量的具有相同名称和定义的列。

CREATE TABLE table2(
[emp_id] [int] NOT NULL,
[company] [char](4) NULL,
[empno] [int] NOT NULL,
[termination_date] [datetime] NULL,
[rehire_date] [datetime] NULL,
[hire_date] [datetime] NULL,
[first_name] [varchar](128) NULL,
[last_name] [varchar](128) NULL,
[middle_name] [varchar](128) NULL,
[aka] [varchar](128) NULL,
[soc_sec_no] [char](9) NULL,
[birth_date] [datetime] NULL,
[sex] [char](1) NULL,
[race] [char](1) NULL,
[marital_status] [char](1) NULL,
[disability] [char](1) NULL,
[citizenship] [char](4) NULL,
[military] [char](1) NULL,
[union_code] [char](8) NULL,
[eeo_loc] [varchar](254) NULL,
[pers_status] [char](1) NULL,
[employ_type] [char](2) NULL,
[normal_hours] [decimal](12, 2) NULL,
[week_over_hours] [decimal](12, 2) NULL,
[adj_service_date] [datetime] NULL,
[shift] [char](8) NULL,
[visa_number] [char](30) NULL,
[visa_exp_date] [datetime] NULL,
[passport_number] [char](30) NULL,
[passport_exp_date] [datetime] NULL,
[process_cobra] [char](1) NULL,
[maiden_name] [varchar](128) NULL,
[Visa ID] [varchar](15) NULL,
[Visa Type Name] [varchar](16) NOT NULL,
[TA_Source] [varchar](1) NOT NULL,
[LW_ID] [varchar](15) NULL,
[LW_ID_Type] [varchar](18) NOT NULL,
[Taleo_ID] [varchar](254) NULL,
[Uses_Tobacco] [varchar](3) NOT NULL,
[Source_DB] [varchar](8) NOT NULL,
[UserID] [varchar](254) NULL,
[Num1] [varchar](16) NULL,
[Num2] [varchar](16) NULL,
[Num3] [varchar](16) NULL,
[AFF_EmpID] [int] NULL,
[MHC_EmpID] [int] NULL,
[daily_hours] [decimal](12, 2) NULL,
[Orig_Hire_Date] [datetime] NULL,
[WD_Continuous_Service_Date] [datetime] NULL,
[Hire_Date_PM] [datetime] NULL,
[CompanyServiceDate] [datetime] NULL,
[Prim_Order] [bigint] NULL,
[AD_Domain] [varchar](128) NULL,
PRIMARY KEY CLUSTERED 
(
[empno] ASC
)
) ON [PRIMARY]

GO

【问题讨论】:

  • 谢谢 Andrew,刚刚重新格式化,您已经完成了。
  • 您能否发布这些专栏,以便我们了解发生了什么?目前,我们不得不相信您的话,这使得我们无法看到正在发生的事情并为您提供帮助。从表 1 中选择的结果也会有所帮助。
  • 你怎么知道结构是一样的?他们使用相同的创建语句?还是您使用Select into 创建了一个?
  • @Brad 我的理解是,最初创建表格时,它是使用 Select Into 语句创建的,然后稍微调整了表格。
  • @PCSgtL 怎么调整的?!发布这些表格的外观,否则我们将无法为您提供帮助。

标签: sql sql-server tsql


【解决方案1】:

你真的应该明确说明哪些列在哪里,绝对不要在Insert上使用Select *

 Insert into Table2(column1, column2, column3)
 Select column1, column2, column3
 from Table1

现在你知道Table1.Column1 映射到Table2.Column2

【讨论】:

  • 我同意布拉德。但是,如果表相同,那真的会导致问题吗?
  • @PCSgtL 你现在真的知道这些表是一样的吗?我在问题中看不到太多表格结构的方式。
  • 也许您可以进一步了解Created Table3 based on Table2. 的含义。
  • 我同意。不明确说明列总是会导致这样的问题。实施明确的列表后,您可能会发现问题消失了,然后您必须找出原因。
  • 抱歉,延迟确认。我相信这个答案是正确的。
猜你喜欢
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
相关资源
最近更新 更多