【问题标题】:SQL create table with filtersSQL 创建带过滤器的表
【发布时间】:2011-09-06 17:50:40
【问题描述】:

我有一个从导入/导出向导自动生成的创建表 SQL 语句。但是,我创建的表有太多行,因此我只想在某个日期之后导入。

我有以下几点:

CREATE TABLE [DB1].[dbo].[Agent] (
[UserId] nvarchar(50) NOT NULL,
[StatusDateTime] datetime NOT NULL,
[StatusDateTimeGMT] datetime NOT NULL,
) where StatusDateTimeGMT >='2011-08-15'

当我尝试添加 StatusDateTimeGMT 字段为 >='2011-08-15' 的 where 子句时,会引发错误。我也尝试使用 CHECK 约束,但没有成功。有什么想法吗?

这是错误:

错误 0xc002f210:准备 SQL 任务:执行查询
“创建表 [db1].[dbo].[Agent] (
[用户 ID] nvarchar(50) 非空,
[StatusDateTime] 日期时间不为空,
[StatusDateTimeGMT] 日期时间不为空,
)其中StatusDateTimeGMT >='20110815'" 失败并出现以下错误:“来自 HRESULT 的异常: 0x80040E14"。可能的失败原因:查询有问题, “ResultSet”属性设置不正确,参数设置不正确, 或未正确建立连接。

【问题讨论】:

  • 您是否尝试过不使用破折号,例如>= '20110815'?
  • 刚试过,没用。
  • 可能包含 实际 错误消息,而不仅仅是“错误”和显示您尝试添加此 where 子句的位置的屏幕截图。
  • 您不能只是在create table 之后添加“where StatusDateTimeGMT >='20110815'”并期望它能够正常工作!也许使用您想要的过滤器创建一个视图,然后从中导出。
  • 表创建和数据导入是两个独立的任务。

标签: sql sql-server-2005


【解决方案1】:

不知道有没有看懂问题,但是如果你想加载匹配某个参数的数据,你首先创建表,然后使用类似下面的命令将你想要的数据插入其中。

INSERT INTO [BD1].[dbo].[Agent]
SELECT [UserId], [StatusDateTime], [StatusDateTimeGMT] 
FROM [sourceData]
WHERE StatusDateTimeGMT >='2011-08-15'

仅作为示例。

【讨论】:

  • 我在我的 SSIS 包中尝试了这个,但我得到了一个 unicode 转换错误,从我读到的内容,通过使用向导来修复。
  • 您应该提到您正在使用 SSIS。对于这种类型的错误,您可能没有从具有正确类型的源中读取数据。您正在读取什么类型的源文件?
  • 来自不同服务器中的不同数据库。
  • 因此您在 SSIS 中为源数据定义一个 OLEDB 提供程序,创建表来保存数据,然后应用您想要的过滤器导入数据。
  • 使用这种方法,我尝试导入的每个字段都会出现 unicode 转换错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 2020-06-01
  • 1970-01-01
  • 2020-10-15
  • 2019-10-12
  • 2023-03-26
相关资源
最近更新 更多