/* Loop through tempTotal to update the result table */
SET @RowCount = 1
SELECT @MaxRows = COUNT(*) FROM #TempTotal
WHILE @RowCount <= @MaxRows
BEGIN
SELECT @RowCount = @RowCount + 1, @DeviceId = DeviceId, @SourceName = SourceName, @hrs = Hrs
FROM #TempTotal
WHERE rownum = @RowCount
EXEC ('UPDATE #TempInputSourceRpt SET [' + @SourceName + '] = ' + @Hrs + 'WHERE DeviceId = ' + @DeviceId)
END
我想转换上述逻辑以删除循环并提高性能
这样的事情真的很有效率
SELECT EXEC('UPDATE #TempInputSourceRpt SET [' + SourceName + '] = ' + Hrs + 'WHERE DeviceId = ' + DeviceId) FROM #TempTotal
但SQL不允许在SELECT中使用EXEC。
有任何想法/建议吗?
答案 0 :(得分:3)
DECLARE @SQL Varchar(max)
SET @SQL = 'Use MyDatabase'
SELECT @SQL = SQL +
'UPDATE #TempInputSourceRpt SET [' +
SourceName + '] = ' +
Hrs +
'WHERE DeviceId = ' + DeviceId + CHAR(10) + CHAR(13) + ';'
FROM #TempTotal
PRINT @SQL
--EXEC (@SQL)
首先使用EXEC
评论来运行它以查看它是否是您需要的,然后您可以取消标记它以运行它。
答案 1 :(得分:0)
您可以选择FROM an exec ...
答案 2 :(得分:0)
什么版本的sql-server?如果说2008年,MERGE是一个很棒的新功能,可以让这个操作变得更容易。