在WHILE循环中使用动态SQL

时间:2014-03-28 22:09:17

标签: sql-server-2008 dynamic

我在保险公司工作并创建自定义应用程序。当我们对策略应用coverage时,它将存储在具有Limit,Deductible和Premium字段的表中。但是,有许多覆盖范围不符合规范。它们使用Limit,Deductible和Premium的不同字段,甚至存储在不同的表中。 (不要问为什么,甚至不试图理解他们仍在这样做的事实,所以我需要留下逻辑以允许这样的额外覆盖。)他们选择的字段也没有押韵或理由漂浮不定。

因此,我们决定创建“LookUp”表,这些表将存储覆盖所需的所有信息。这避免了许多连接 - 我们遇到了应用程序的速度和性能问题。

我需要找到一种方法将所有这些字段预先填充到表格中。我希望性能方面的最佳选择。这将最终成为一个夜间工作 - 所以当我们收到新的数据快照时,我们将运行此查询并预填充/更新表的值。

我有以下代码,我为每个政策循环使用这个代码,每晚大约614,000次...需要很长时间才能运行。

我有更好的方法吗?

SELECT @SQL = N'SELECT @Limit=' + ISNULL(Limit, '''''') + N',@Deductible=' + ISNULL(Deductible, '''''') + N',@Premium=' + ISNULL(Premium, '''''') + N'     FROM PHI_PIJ.dbo.ASBYCPP' + N' WHERE ' + PolicyNum + N' = ''' + @PolicyKey +'''' + N' AND BYAOTX' + N'='''+Coverage +''''
FROM PolicySummary.dbo.Coverage 
WHERE Coverage = @Coverage 
AND LOB = 'BOP'         

EXEC sp_executesql @SQL, N'@Limit nVarChar(255) output,@Deductible nVarChar(255) output,@Premium nVarChar(255) output', @Limit output, @Deductible output, @Premium output              

UPDATE PolicySummary.dbo.CoverageLkup
SET Limit = @Limit, Deductible = @Deductible, Premium = @Premium
WHERE CovAbbrev = @Coverage
AND PolicyKey = @PolicyKey

这是我的While循环中的内容:

SELECT @SQL = N'SELECT @Limit=' + ISNULL(Limit, '''''') + N',@Deductible=' +     ISNULL(Deductible, '''''') + N',@Premium=' + ISNULL(Premium, '''''') + N' FROM PHI_PIJ.dbo.'     + [File] + N' WHERE ' + PolicyNum + N' = ''' + @PolNum +'''' + N' AND ' + @CovField +     N'='''+Coverage +''''
FROM PolicySummary.dbo.Coverage 
WHERE Coverage = @Coverage 
AND LOB = @LOB           

EXEC sp_executesql @SQL, N'@Limit nVarChar(255) output,@Deductible nVarChar(255)         output,@Premium nVarChar(255) output', @Limit output, @Deductible output, @Premium output

INSERT INTO #OptCov2 VALUES(@Coverage, @Description, @LOB, @Limit, @Deductible,     @Premium)

0 个答案:

没有答案