我正在創建一個sql腳本,我有2個遊標循環通過數據表遊標和公司遊標。 我有把公司光標問題放在一起使用while循環將數據複製到架構 我需要回答使用If聲明對SQL遊標使用while循環?
以下問題是否表有companyID列? if語句爲公司ID 檢查,如果是,那麼在光標
基於companyID數據複製我有一個@firstLoop宣佈
這裏是我的光標特定代碼
DECLARE @firstLoop BIT
SET @firstLoop = true
----------- Cursor specific code starts here ------------
-- company cursor
declare copyCompanyDataCursor CURSOR fast_forward FOR
SELECT ID from #CompanyIDs;
open copyCompanyDataCursor
fetch next from copyCompanyDataCursor into @Company_Id;
WHILE @@FETCH_STATUS = 0
BEGIN
declare @processorder int;
declare @tablename varchar(500);
-- table cursor
declare copyTableDataCursor CURSOR fast_forward FOR
SELECT processorder,tablename from #TableList4 order by processorder;
open copyTableDataCursor
fetch next from copyTableDataCursor into @processorder, @tablename;
while @@FETCH_STATUS = 0
BEGIN
SET IDENTITY_INSERT [c365online_script1.dbo.tCompany] OFF
-- Does the table have a companyID column? if statement checking for company id
-- if yes then copy data based on companyID in cursor
-- if no check if this is the first time through company loop and copy all data
-- if @firstloop company exists look at information schema
-- insert into c365online_script1.dbo.tCompany(selec
EXEC('INSERT ' + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ')')
-- company logic
SET IDENTITY_INSERT [c365online_script1.dbo.tCompany] ON
FETCH NEXT FROM copyTableDataCursor into @processorder,@tablename;
END
close copyTableDataCursor;
Deallocate copyTableDataCursor;
--INSERT INTO c365online_script1.dbo.tCompany
--SELECT *
--FROM production2.tCompany
--WHERE ISNULL(CompanyID, 0) = 0 -- copy all data where id is equal to zero
[email protected]_Database_Name
--
--EXEC(INSERT + @Destination_Database_Name + '.dbo.' + @tablename + ' SELECT * FROM ' + @Source_Database_Name + '.dbo.' + @tablename + ' WHERE ' + @Source_Database_Name + '.dbo.' + @tablename + '.CompanyID = ' + @Company_Id + ')'
SET @firstLoop = false;
FETCH NEXT FROM copyCompanyDataCursor into @Company_Id;
END
CLOSE copyCompanyDataCursor;
DEALLOCATE copyCompanyDataCursor;
呃,究竟是這一切的呢?如果你實際上試圖複製一個模式,幾乎可以肯定內置選項...... –
其目的是通過生成一個腳本來減小數據庫的大小,你可以通過選擇一個腳本來生成一個縮小的數據庫很少有公司在特定的時間需要。架構已被複制到一個空數據庫中,現在我需要填充它。 – user2520671
......如果你沒有複製所有的表格,我會把相關表格放在他們自己的模式中。應該有默認生成的腳本,它們將複製模式表。也可能用於表格內容......也許。 _爲什麼你這樣複製數據庫?請注意,這實際上並不會減少主數據庫的大小,因爲您仍然擁有所有原始數據。 –