替代动态SQL和每个循环

时间:2019-01-20 03:31:33

标签: sql sql-server-2014

我需要针对同一源数据库的5个不同实例执行相同的select语句-每个诊所1个-将结果集合并在一起以进行进一步处理。我负责维护的现有脚本为每个循环执行一个(每个实例1次迭代),并在每次迭代的select语句中替换数据库名称。当前,从“ master”中选择“ db 1,db2,db3,db4,db5”中的dbs来获得db名称。

我希望保留一个带有每个数据库名称的参考表以及一个是否包含它们的标志。但是,对于每个循环,还有替代方法吗?

1 个答案:

答案 0 :(得分:0)

因此,您有5个不同的诊所,每个诊所都有一个名称为db1,db2,db3,db4,db5的数据库。

所有数据库名称都存储在字符串变量中,例如“ db1,db2,db3,db4,db5”,您可以将其用作数组来对数据库名称进行排序。

当然,要处理所有这些不同的数据库似乎很笨拙,但是当您获得它时,情况看起来是这样,并且可能具有某些优势,至少有人入侵或以其他方式处理了一个诊所可能造成混乱其他数据库中的内容。

至少循环没有使用像这样的简单迭代:

For i = 1 to 5
    strDBName = "db" & i
Next

使用i进行迭代的一个问题是,如果诊所2不再处于活动状态,则应该不再使用db2,该怎么办。当然,这里会增加一个新诊所,然后将“ For i = 1至5”更改为“ For i = 1至6”。

因此,考虑到上述较差的工作方式,我有点像当前的方式(字符串变量中的数据库名称可以作为数组循环通过)。对我来说,可能的想法是“持有一个带有每个数据库名称的参考表,并标记一个是否包含这些数据库的名称”,这似乎是做您已经在做的事情的一种奇特的方式,我个人完全赞成“保持简单”和“如果没有破裂,请勿修复。”

编辑:
但是,我考虑得越多,就采用了“持有每个数据库名称和是否包含它们的标记的引用表”的想法,并对其进行一点操作,以下内容似乎很自然(但当然可以肯定管理员用户可以看到有关特定数据库的任何字段):

具有以下字段的诊所表:
ClinicID
诊所名称
诊所地址
ClinicDBName-注意可以在此处存储数据库名称
ClinicIsInactive