我需要一些帮助来使用游标和变量来填充查询。我正在使用SQL Server 2008 R2。
我要做的是填充带有插入的临时表,运行一列数据生成一个变量,然后填充一个查询表中的行数。以下是我到目前为止的情况:
IF OBJECT_ID('tempdb..#part_tables') IS NOT NULL DROP TABLE #part_tables
create table #Part_tables
(table_Name nvarchar(100))
Insert INTO #Part_Tables (table_name)
SELECT [InstancesTable] FROM [BAMPrimaryImport].[dbo].[bam_Metadata_Partitions]
WHERE [ArchivingInProgress]=0 and ArchivedTime IS NULL
and creationtime < dateadd(DD,-21,getdate())
GO
Insert INTO #Part_Tables (table_name)
SELECT [RelationshipsTable] FROM [BAMPrimaryImport].[dbo].[bam_Metadata_Partitions]
WHERE [ArchivingInProgress]=0 and ArchivedTime IS NULL
and creationtime < dateadd(DD,-21,getdate())
GO
DECLARE @count_query VARCHAR(MAX)
DECLARE @Value NVARCHAR(100)
SET @Value ='Select Table_Name from #Part_Tables'
SET @count_query ='
select count (*) from @Value with (NOLOCK)'
WHILE 1 = 1
BEGIN
EXEC(@count_query + ' option(maxdop 5) ')
IF @@rowcount < 1 BREAK;
END
如果这样可行,那太好了!如果你有不同的/更好的方法,我会很感激有人可以提供任何指导。
答案 0 :(得分:0)
这是从这些表中获取行计数的一种更简单的方法。不需要游标或循环。并且要小心那个NOLOCK提示......它可以做的不仅仅是脏读。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/
declare @SQL nvarchar(max) = ''
select @SQL = @SQL + 'select count(*) from ' + QUOTENAME(InstancesTable) + ' UNION ALL '
FROM [BAMPrimaryImport].[dbo].[bam_Metadata_Partitions]
WHERE [ArchivingInProgress] = 0
and ArchivedTime IS NULL
and creationtime < dateadd(Day, -21, getdate())
set @SQL = LEFT(@SQL, len(@SQL) - 10)
select @SQL --uncomment exec statement below when satisfied this is correct
--exec sp_executesql @SQL