我一直忙於編寫包含兩個臨時表和遊標的存儲過程。我已經收到這份任務已經兩天了,這給我一個很難的時間,因爲這是我第一次忙於編寫這樣複雜的SP。SELECT在遊標中的位置不正確導致無數個表彈出
遊標應該從DATABASE_X派生數據,並讓該數據被拿來與DATABASE_Y進行比較。
的TableInfo表DATABASE_Y是包含所有或大部分是在DATABASE_X模式和表的。 ColumnInfo表也是類似的情況,與TableInfo表唯一不同的是它也能夠包含列數據。
的臨時表,它們分別包含不存在的表的數據在DATABASE_Y.TableInfo和非現有列在DATABASE_Y.ColumnInfo意在比較之後將被填充。 (非現有意味着表阿在DBX存在但不是在DBY.TableInfo的行和列的情況下反之亦然)
的NotInUse列存在於DATABASE_Y.TableInfo爲行列式是否應該考慮DBX中的表格進行檢查。
CREATE TABLE #NONEXISTENT_TABLES(
SCHEMA_NAME VARCHAR(100),
TABLE_NAME VARCHAR(100)
)
CREATE TABLE #NONEXISTENT_COLUMNS(
SCHEMA_NAME VARCHAR(100),
TABLE_NAME VARCHAR(100),
COLUMN_NAME VARCHAR(100)
)
DECLARE @SchemaName VARCHAR(100)
DECLARE @TableName VARCHAR(100)
DECLARE @ColumnName VARCHAR(100)
USE DATABASE_X;
DECLARE CRS_GET_NONEXISTENT_STUFF CURSOR FOR
select s.name as 'sname', t.name as 'tname', c.name as 'cname'
from sys.schemas (nolock) s
join sys.tables (nolock) t
on s.schema_id = t.schema_id
join sys.columns (nolock) c
on c.object_id = t.object_id
order by 1,2,3
OPEN CRS_GET_NONEXISTENT_STUFF
FETCH NEXT FROM CRS_GET_NONEXISTENT_STUFF INTO @SchemaName,
@TableName,
@ColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
select @SchemaName, @TableName
from DATABASE_Y..TableInfo (nolock) ti
print @SchemaName + '-' + @TableName
IF @@ROWCOUNT = 1
BEGIN
declare @NotInUse varchar(100)
select @NotInUse = ti.[NotInUse]
from DATABASE_Y..TableInfo (nolock) ti
where ti.[Schema] = @SchemaName
and ti.[Name] = @TableName
print @SchemaName + '-' + @TableName
IF @NotInUse = '0'
DECLARE @colname varchar(100)
BEGIN
select @colname = ci.[Name]
from DATABASE_Y..ColumnInfo (nolock) ci
where ci.[TableSchema] = @SchemaName
and ci.[TableName] = @TableName
and ci.[Name] = @ColumnName
print @SchemaName + '-' + @TableName + '-' + @ColumnName
IF @colname IS NULL
BEGIN
INSERT INTO #NONEXISTENT_COLUMNS(SEMA_ADI, TABLO_ADI, KOLON_ADI)
VALUES(@SchemaName, @TableName, @colname)
END
END
END
ELSE
INSERT INTO #NONEXISTENT_TABLES(SCHEMA_NAME, TABLE_NAME)
VALUES (@SchemaName, @TableName)
FETCH NEXT FROM CRS_GET_NONEXISTENT_STUFF INTO @SchemaName,
@TableName,
@ColumnName
END
CLOSE CRS_GET_NONEXISTENT_STUFF
DEALLOCATE CRS_GET_NONEXISTENT_STUFF
SELECT * FROM #NONEXISTENT_COLUMNS
SELECT * FROM #NONEXISTENT_TABLES
DROP TABLE #NONEXISTENT_COLUMNS
DROP TABLE #NONEXISTENT_TABLES
假設: *上DBX的第一個模式是AAA和AAA的DBX是BBBBB * AAA的第二個表是CCCCC第一表;
我收到了無數的表格,其結果是看起來很像看起來很快就會很快查詢,在5-6個表格中只顯示5000行左右的AAA-BBBBB,然後移動到AAA-CCCCC正在做上面發生的事情,並且繼續下去。
我相信我的錯誤是把那個WHILE循環下的SELECT命令,但我也相信,這是不是我唯一的錯誤...
我會很感激有大家的意見關於這個問題。
對於純粹的文字牆,我表示歉意。
在腳本錯誤上面使我收到表的無限量,我必須解決這個問題......這是基本的問題。 我應該只收到兩個最終表格,這些表格是不存在的表格和不存在的表格。 –
那麼刪除/註釋足夠的代碼,你會發現它被卡住的原因,一旦你知道是什麼原因造成的,請修復它。 –
我覺得我應該發佈整個代碼,因爲我不熟悉語法......我不確定是否我有多個錯誤。 –