2014-06-05 64 views
0

我想在SQL服務器中獲取任意SQL查詢的架構。如何在SQL服務器中任意查詢的列架構

對於示例 -

Create Table Tabl1(Ta1bID int ,col1 varchar(10)) 

Create Table Tabl2(Tab1ID int ,col2 varchar(20)) 

SQL查詢 -

SELECT col1, col2 
FROM Tab1 
INNER JOIN Tab2 ON Tab1ID = Tab2ID 

這導致纔會有這種schema-

Col1 varchar(10), Col2 varchar(20) 

我想知道會是什麼結果的模式。

PS:我剛剛在執行此查詢的服務器上讀取訪問權限。

任何方式來做到這一點?

+0

是否要打印每列的數據類型或只想獲取沒有任何數據的模式? – qxg

+0

實際上,我必須將結果存儲在其他服務器中。所以我必須在那裏創建一個帶有結果模式的表。需要知道列名和數據類型(長度也在nvarchar/varchar的情況下) –

回答

0

模式,你的意思是說數據類型的權利?對於結果數據類型,你總是知道你何時在表上操作。在你的情況中,兩列都是varchar數據類型,所以它會給出字符數據類型,你可以轉換成任何字符數據類型,如varchar,nvarchar,char,ntext等。

基本的事情是,表設計完成了,所以我們知道爲什麼要定義數據類型,現在當您執行下面的查詢時,您總是會知道每列的數據類型會帶來什麼。您運行添加列按您的要求,然後你執行可能會或可能不會因錯誤的數據類型的不匹配給誤差,

SELECT col1, col2 
FROM Tab1 
INNER JOIN Tab2 ON Tab1ID = Tab2ID 

這雖然會發出當您使用動態查詢。 像

declare @sqlstring nvarchar(max) 

set @sqlstring = 'declare @t table (name varchar(50)) 
insert into @t values(''Minh''),(''Tinh''),(''Justin'') 

Select * from @t where Name like ''%in%''' 

EXEC sp_executesql @sqlstring 
+0

我已經得到了ans。這是我做的 - SELECT * INTO #TempTable FROM(SELECT col1,col2 FROM Tab1 INNER JOIN Tab2 ON Tab1ID = Tab2ID)AS TAB。然後我從tempdb.sys.columns讀取#TempTable表的列名和模式(數據類型和長度等)。 –

0

我有過類似的問題,但我有一個創建的每個查詢一個表(70+)。

  • 如果有一個模式,寫一個工具來生成創建表 聲明。
  • 如果不是,而且這是一次性工作,只需手動創建它們即可。
  • 如果這不是一次性工作,您可能會想,爲什麼要在表中儲存溫度爲 的日期而不是臨時表。