2012-08-10 32 views
0

當我在我的視圖中右鍵單擊,然後單擊「腳本視圖爲」,我得到以下錯誤:如何獲取「CREATE TABLE」查詢?

Property TextHeader is not available for View '[dbo].[TableName]'. This property may not exist for this object, or may not be retrievable due to insufficient access rights. The text is encrypted. (Microsoft.SqlServer.Smo)

我能夠使用bcp拿到表的轉儲,並創建格式文件給出here。該表有大約60列,我不想手動編寫CREATE TABLE查詢。有沒有辦法自動做到這一點?

我希望

BULK INSERT DB.dbo.TableName 
FROM 'E:\Databases\TableName' 
WITH (FORMATFILE = 'E:\Databases\TableName.Fmt'); 
GO 

會做的伎倆,但它看起來像表本身應該是存在於數據庫中之前,我可以執行上述查詢。有什麼建議麼?

+0

由於錯誤提示,問題可能是權限。你可以訪問INFORMATION_SCHEMA表嗎?您可以從那裏構建表(至少是列,這是您需要的所有bcp)。 – 2012-08-10 00:48:14

+0

@GordonLinoff:如果這是'System.Views'下的那個,是的,我可以訪問它們。所以唯一的方法是可能得到這個模式的轉儲,然後手動創建查詢? – Legend 2012-08-10 00:52:13

回答

2

您可以從INFORMATION_SCHEMA.Columns構造create table語句。例如:

select (column_name + ' ' + data_type + 
     (case when character_maximum_length is not null 
       then '('+character_maximum_length+')' 
       else '' 
     end) + ',' 
     ) as ColumnDef 
from Information_Schema.columns 
order by ordinal_position 

這可能已經足夠了。例如,如果您必須處理數字,或者希望「爲空」爲準確,則可以使其更復雜。

將結果複製到一個新窗口中,添加create table語句,刪除最終的逗號並添加最終的關閉paren。

您可以在更復雜的SQL語句中完成最後一步,但手動執行一次性工作更容易。

+0

太棒了...!感謝您的時間 :) – Legend 2012-08-10 01:12:34