我们可以在select语句中使用EXEC()

时间:2011-07-20 19:06:24

标签: sql-server tsql

/* 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。

有任何想法/建议吗?

3 个答案:

答案 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是一个很棒的新功能,可以让这个操作变得更容易。