2012-07-24 34 views
1

我是一個Oracle開發人員試圖瞭解T-SQL。 我有在它一列(table_name)的表。我需要能夠遍歷所有行並查找給定表的所有列。然後我需要輸出它的結果到文件中。 在Oracle它是由以這種方式使用遊標很簡單:通過遊標變量到一個查詢

cursor my_curr is select table_name from my_table; 
for x in my_curr loop 
    select column_name from user_tab_columns 
    where table_name = x.table_name; 

    utl_file ..... (writing result to an OS file) 
end loop; 

什麼是上面的T-SQL的相同呢?我將如何使用遊標變量傳遞給查詢?

謝謝, 尤金

+0

您可以使用遊標,但你不能使用t-sql寫入外部文件。 – 2012-07-24 19:11:02

回答

1

聲明爲列結果的變量,並且光標。

declare @name varchar(100) 
declare my_curr cursor 
for select table_name from my_table; 

打開光標

open my_curr 

讀取第一行入變量

fetch from my_curr into @name 

@@Fetch_Status是是否所述提取是成功

while @@Fetch_Status=0 
begin 

使用variabl從遊標中獲取,與系統表比較以獲取列。 SQL服務器的新版本也可以使用INFORMATION_SCHEMA,但是這將在所有版本

select c.name from syscolumns c 
     inner join sysobjects o on c.id = o.id 
    where o.name = @name; 

    --utl_file ..... (writing result to an OS file) 

工作抓取下面一行

fetch next from my_curr into @name 

end 

處置光標

close my_curr 
deallocate my_curr 
+0

感謝您的回覆。我的最終目標是顯示2個表格之間的差異。所以,我不得不table_name的提取到@name,然後運行該查詢拉列的列表下面的使用:從 「選擇*(請從表1 <列的列表>除了 選擇<列表(從表格2中選擇<列表列表> ,除了從表格1中選擇<列表列表>)x'是否有可能?請選擇'表格2'作爲tblName,*從 – user1549571 2012-07-24 19:17:37

+0

它們的結構有何不同?您可以將此查詢的結果與現有表的查詢結果進行比較,以查找差異。或者你可以使用一個工具,如SQL Server數據工具... http://msdn.microsoft.com/en-us/data/tools.aspx – podiluska 2012-07-24 19:19:42

+0

數據的差異。我有500多張桌子要經過。 – user1549571 2012-07-24 19:21:26