2017-05-03 33 views
0

我需要一些帮助来使用游标和变量来填充查询。我正在使用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 

如果这将工作,太棒了!如果您有不同的/更好的方式来做到这一点,我将不胜感激任何人可以提供的指导。

+1

这已经写了这一切[XYPropblem](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。询问问题,而不是解决方案。 –

+0

我想至少展现我一直在做的事情,以表明我一直在思考和尝试不同的事情。我可以改变我的问题,只是提出问题,看看提供的解决方案。 – bwilliamson

+0

这是很好的显示你的尝试,但在我看来,这个问题是关于它而不是你想解决的实际问题。原谅我,如果我有错误的印象。 –

回答

0

这是从这些表中获取行计数的简单方法。不需要游标或while循环。并且要小心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 
+0

我明白你的意思是脏读,但我不想锁定生产表只是试图获得一般的行数。这似乎没有计算目标表中的行数。我希望能够在一次重击中完成这一切。 – bwilliamson

+0

没关系。看起来像返回的值是正确的。我看到0计数,但无论如何它们都是空的。非常感激。 – bwilliamson

+0

那么这是做还是不做你想要完成的? –