在将sql server表中的每个单元格复制到另一个数据库时,如何最好地检查和转换它?

在将sql server表中的每个单元格复制到另一个数据库时,如何最好地检查和转换它?,sql,sql-server,copy,transform,Sql,Sql Server,Copy,Transform,我有一系列的表,我必须移动到另一个数据库。在移动它们的过程中,我需要检查每个单元格,如果它有一个特定的值,则将该单元格设为null 我有一个表,其中包含指向每个单元格的属性的元数据,还有一个必须从原始表中删除的坏值列表 例如,我有下表 TABLE1 ColumnA | ColumnB | ColumnC | 7 | 10 | DK | 83 | -7 | | 16 | 0 | True |

我有一系列的表,我必须移动到另一个数据库。在移动它们的过程中,我需要检查每个单元格,如果它有一个特定的值,则将该单元格设为null

我有一个表,其中包含指向每个单元格的属性的元数据,还有一个必须从原始表中删除的坏值列表

例如,我有下表

TABLE1
ColumnA | ColumnB | ColumnC |
   7    |   10     |   DK     |
   83   |   -7     |          |
   16   |   0      |   True   |
然后,元表

Tablename | Column |  Bad Value 1 | Bad Value 2 |
  TABLE1  |ColumnC |      DK      |    BOL      |
  TABLE1  |ColumnA |      -99     |    -1       |
  TABLE1  |ColumnB |      -1      |     -7      |
在复制和转换的表1中,我会

TABLE1
ColumnA | ColumnB | ColumnC |
   7    |   10     |   NULL   |
   83   |   NULL   |          |
   16   |   0      |   True   |
我想知道做这件事的最好方法是什么。我考虑过编写一个函数,为每个单元格调用它。它将被传递在元“坏值”表中查找单元格所需的元信息和单元格的当前值,然后根据单元格是否匹配任何相应的坏值返回单元格值或NULL

如果我走这条路线,我可以在从原始表读取值、将值写入新表的位置应用它,或者在复制后,运行一个单独的进程来更改复制表中的值

我需要定期(每周)重复这个过程

如果您能提供任何建议,我们将不胜感激


Tom

您需要为此编写一个游标,并使用动态SQL。我不认为你会在这里找到任何人会为你编码整个事情,但这里有一些需要考虑的要点

  • 制作一个“主”表,其中包含所有要复制的表。我假设有一张桌子在某个时候不需要替换是可能的。这将允许您轻松修改流程。建议的结构类似于
    数据库、模式、表、活动
    ,其中
    活动
    是您可以切换的一点

  • 使用动态SQL,为每个表构建一个
    INSERT
    语句。从表中获取“坏”值,以填充这些字段的
    大小写。因此,类似于当ColumnC='DK'或ColumnC='BOL'时的
    情况,然后将其他ColumnC作为ColumnC
    设置为NULL。这将更新“正在传输”的值,这样您就不会更改现有的数据库,但您的目标具有所需的更改

  • 您需要为受影响的表中的每一列提供一个条目,为每个表中的列提供一个单独的“主”表,或者查询系统表以获取要复制的字段列表。如果需要执行
    CASE
    语句,则不能只执行
    SELECT*


有几个表有1000多列。如果每一列都有一个case语句,我会遇到查询字符串限制吗?不确定。那么,你的结构确实有问题。我想不出你为什么需要1000个字段的表格,除非你在前世试图惩罚一个DBA,因为他犯了罪。一个表格代表一份50页的医疗健康问卷,有1000+个字段questions@user-有更好的方法可以做到这一点,例如一个具有三重键的表,即
UserId、TestId、AnswerID
。处理三个字段宽的数百万行要比处理数千个字段宽的数千行容易得多。你的所有行都不能放在一个页面上,因此你有大量的碎片和其他问题。而且,我真的很感激你在第一时间回答了这个问题JNK!我只是想知道是否有人面临过类似的考验。