很明显,我可以使用BCP,但这是问题所在。如果批处理中的某条记录具有无效日期,我希望将其重定向到单独的表/文件/任何内容,但保持批处理运行。我不认为SSIS可以安装在服务器上。从固定宽度的平面文件中获取数百万条记录到SQL 2000
回答
创建一个处理INSERT的触发器。该触发器将对您的日期字段进行验证检查。如果验证失败,则插入到单独的表格中,并且还可以选择继续插入或不允许插入。
的重要注:默认情况下,触发器不上批量插入火(BCP & SSIS包括在内)。为了得到这个工作,你需要指定要触发火灾,使用类似:
BULK INSERT your_database.your_schema.your_table FROM your_file WITH (FIRE_TRIGGERS)
你是说有一个完整的文件中的日期栏,和你想要的数据在SQL数据库的表中进入“datetime”类型的列?如果文件中的某个值不是有效的日期,它会炸毁吗?我只是想确保我理解这个权利。
您可以在SQL数据库中创建另一个临时表,其结构与您希望文件中的数据最终结束的表具有相同的结构,但每个类的类型为varchar(255)或其他类型。将数据从文件中抽出并放入该表中不应该失败,无论任何日期是否有效。
然后,在SQL中,您可以根据需要按摩数据。您可以使用cursor来选择临时表中的所有记录并循环访问它们。对于每条记录,可以使用T-SQL ISDATE函数有条件地将当前记录的值插入到一个或另一个表中。
我说,获取数据到数据库中,然后运行这样的脚本:
// **this is untested, there could be syntax errors**
// if we have tables like this:
CREATE TABLE tempoary (id VARCHAR(255), theDate VARCHAR(255), somethingElse VARCHAR(255))
CREATE TABLE theGood (id INT, theDate DATETIME, somethingElse VARCHAR(255))
CREATE TABLE theBad (id INT, theDate VARCHAR(255))
// then after getting the data into [tempoary], do this:
DECLARE tempCursor CURSOR
FOR SELECT id, theDate, somethingElse FROM temporary
OPEN tempCursor
DECLARE @id VARCHAR(255)
DECLARE @theDate VARCHAR(255)
DECLARE @somethingElse VARCHAR(255)
FETCH NEXT FROM tempCursor INTO @id, @theDate, @somethingElse
While (@@FETCH_STATUS <> -1)
BEGIN
IF ISDATE(@theDate)
BEGIN
INSERT INTO theGood (id, theDate, somethingElse)
VALUES (CONVERT(INT, @id), CONVERT(DATETIME, theDate), somethingElse)
END
ELSE
BEGIN
INSERT INTO theBad (id, theDate)
VALUES (CONVERT(INT, @id), theDate)
END
FETCH NEXT FROM tempCursor INTO @id, @theDate, @somethingElse
END
CLOSE tempCursor
DEALLOCATE tempCursor
呀,如果你正在使用DTS,你应该只导入使用VARCHAR而不是一个临时表日期,然后将数据按顺序按摩到适当的表格中。
马特说的问题是你不应该使用游标操作数据,特别是如果你有数百万条记录。 CUrsoprs效率非常低,应该避免。
改为使用批处理。
但通过一切手段使用他的临时表的想法。我不会考虑直接导入到生产表中,因为随着时间的推移,可能会发生太多事情来更改输入文件中的数据并导致问题。
我想我明白你在说什么了。使用游标会很慢,尤其是在问题中提到的数百万条记录的情况下,还因为这似乎是需要常规而不是一次性发生的事情。 – 2008-09-21 21:32:13
- 1. 如何从平面文件读取数百万条记录?
- 2. 从平面文件中插入数百万条记录到SQL Server中有哪些缺陷?
- 3. SQL - 插入数百万条记录
- 4. 从文本文件中读取多行固定宽度记录
- 5. 从文本文件中读取固定宽度记录
- 6. 如何将数百万条记录从SQL Server 2000导入Microsoft Excel 2010
- 7. 分裂2000万条记录数据库
- 8. 从表sql服务器中选择百万条记录
- 9. 从SQL Server中选择百万条记录
- 10. 用SSIS导入数百万条记录
- 11. 更新数百万条记录
- 12. 为数百万条记录创建XML
- 13. SQL Server查询优化 - MultiJoins在2000万条记录中的表
- 14. 在SQL Server 2012中更新数百万条记录
- 15. 在LINQ to SQL中超时插入数百万条记录
- 16. 如何使用nodejs获取/计数mongodb中的数百万条记录
- 17. 从MEMORY表中移动百万条记录到MYISAM表
- 18. 从数据库中检索一百万条记录
- 19. SSIS 2005 - 如何导入固定宽度的平面文件?
- 20. 将固定宽度平面文件转换为csv的脚本
- 21. UILabel固定宽度/固定高度获取文本编号
- 22. PHP Laravel使用MYSQL获得数百万条记录
- 23. 堆满内存时抓取数百万条记录
- 24. 将固定宽度的文本文件从zipfiles读取到Pandas数据框中
- 25. 从文本文件导入数以百万计的记录到mysql表
- 26. 有百万条记录存在的页面的性能改进
- 27. Sql以百万记录搜索。可能?
- 28. 提示SQL查询连接有百万条记录的表
- 29. 在cassandra中读取超过百万条记录
- 30. 固定宽度文件到sql server宽表
我喜欢你的想法,它听起来更简单。 – 2008-09-21 06:17:47