這個查詢應該是從SQL數據庫中刪除臨時表/視圖,但是當刪除最後一個表/視圖時,它會保持循環。任何人都有答案,爲什麼當刪除最後一個表時,這將會陷入無限循環?雖然循環問題
DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
DECLARE @type VARCHAR(50)
DECLARE @tmp_table TABLE
(
table_name VARCHAR(50)
, table_type VARCHAR(50)
)
;WITH cte_tempTables
AS (
SELECT
table_name
, crdate
, crdate + 90 [ExperiationDate]
, TABLE_TYPE
FROM
INFORMATION_SCHEMA.TABLES t
inner join sysobjects s
on s.name = t.table_name
WHERE
TABLE_CATALOG = 'SBR_Temp'
AND t.table_name NOT IN ('DaleDelq' ,'tblCancelContract' ,
'tblCreateContracts' ,'MWFRTPay')
)
INSERT INTO
@tmp_table
(
table_name
, table_type
)
select
table_name
, table_type
FROM
[cte_tempTables]
WHERE
ExperiationDate < GETDATE()
SELECT TOP 1
@name = [table_name]
, @type = CASE WHEN [table_type] = 'BASE TABLE' THEN 'TABLE'
ELSE 'VIEW'
END
FROM
@tmp_table
WHILE @name IS NOT NULL
OR @name <> ''
BEGIN
SELECT
@SQL = 'DROP ' + @type + ' SBR_Temp.[dbo].[' + RTRIM(@name) + ']'
--EXEC (@SQL)
PRINT 'Dropped ' + @type + ':' + @name
DELETE
@tmp_table
WHERE
[table_name] = @name
SELECT TOP 1
@name = [table_name]
, @type = CASE WHEN [table_type] = 'BASE TABLE' THEN 'TABLE'
ELSE 'VIEW'
END
FROM
@tmp_table
SELECT @name
END
GO
這裏是結果
(4行(一個或多個)受影響) 掉落視圖的一個實例:(受影響)1行(多個)vue_SunsetCoveClientInventory
(1行(s)affected) 已刪除VIEW:vue_SunsetCoveClientCoOwners
(1 row(s)affected)
(1行(一個或多個)受影響) 掉落表:(受影響1行(S))BKDischarge
(受影響1行(S))
掉落VIEW:vue_nocoop
( 1行(一個或多個)受影響)
(1行(一個或多個)受影響) 掉落VIEW:vue_nocoop
(0行(或多個)受影響)
(1行(一個或多個)受影響) 掉落VIEW:(受影響1行(S))vue_nocoop
(影響0行(S))
掉落VIEW:vue_nocoop
(0行(或多個)受影響)
(1行(一個或多個)受影響) 掉落VIEW:vue_nocoop
(0行(多個)AFF影響vue_nocoop
(0行(S))
也許'@ name'是保持其原來的值,而不是設置爲'NULL'或'「」'時,所有的臨時表都不見了? – JAB 2012-08-01 18:27:09