2017-05-03 34 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

那麼這是做還是不做你想要完成的? –