2013-04-22 191 views
0

這可能嗎?我得到一個大的.sql文件,其中充滿了Insert Into語句而沒有數據庫模式。我可以隨時創建表格嗎?使用Insert Into即可創建表格

下面是一個例子:

INSERT INTO [g_fuel_site] ([SiteID], ... ,[EMVEnabled]) 
    VALUES('Sep 23 2011 3:05:51:000PM', ... ,0) 

編輯:有沒有表!劇本假設我做到了!

+0

@Bernie爲什麼不在編輯標籤時修正格式? – 2013-04-22 18:35:11

回答

1

亞倫打了我20秒。 有關示例更改從第一插入件:

INSERT INTO [g_fuel_site] ([SiteID],[CurrentOperatingLevelID],[CurrentPriceBookID], [NumberFuelSaleBuffers],[LinearUnitOfMeasure],[VolumeUnitOfMeasure],[PreAuthAllowed],[StackedSalesAllowed],[MaxLiveDispensers],[AllowedZeroPPUs],[MaxPPU],[MinPPU],[InitialConfigDone],[DispenserOptionModeID],[GenAuthEnabled],[PendingPriceBookID],[AllowPresetWithHandleUp],[UseFixedGradeName],[UseFixedServiceLevelName],[UseFixedGradeProductCodes],[TokenAttendantRcptCtl],[TokenAttendantNtwrkRcptCtl],[TokenAttendantPrpayRcptCtl],[RunAttendantInBufferedMode],[AllowAttendantBalanceQuery],[TokenOrStandardOperation],[TokenPrefix],[EnablePostPayLimit],[PostPayLimit],[EMVEnabled])VALUES('Sep 23 2011 3:05:51:000PM',1,1,2,'CM','L',1,1,12,0,9.9990,0.7500,1,1,1,2,1,0,0,0,0,0,0,0,0,0,'',0,100.0000,0) 

爲:

SELECT 
'Sep 23 2011 3:05:51:000PM' [SiteID], 
1 [CurrentOperatingLevelID], 
1 [CurrentPriceBookID], 
2 [NumberFuelSaleBuffers], 
'CM' [LinearUnitOfMeasure], 
'L' [VolumeUnitOfMeasure], 
1 [PreAuthAllowed], 
1 [StackedSalesAllowed], 
12 [MaxLiveDispensers], 
0 [AllowedZeroPPUs], 
9.9990 [MaxPPU], 
0.7500 [MinPPU], 
1 [InitialConfigDone], 
1 [DispenserOptionModeID], 
1 [GenAuthEnabled], 
2 [PendingPriceBookID], 
1 [AllowPresetWithHandleUp], 
0 [UseFixedGradeName], 
0 [UseFixedServiceLevelName], 
0 [UseFixedGradeProductCodes], 
0 [TokenAttendantRcptCtl], 
0 [TokenAttendantNtwrkRcptCtl], 
0 [TokenAttendantPrpayRcptCtl], 
0 [RunAttendantInBufferedMode], 
0 [AllowAttendantBalanceQuery], 
0 [TokenOrStandardOperation], 
'' [TokenPrefix], 
0 [EnablePostPayLimit], 
100.0000 [PostPayLimit], 
0 [EMVEnabled] 
INTO g_fuel_site 

在此之後該表將存在。它只是推斷列的類型,並且只有在第一次select into包含後面插入的所有列時纔會工作。

+0

神聖的廢話,你用手輸入了所有的東西嗎?看起來像很多工作,我不認爲我可以使用替換來正確的格式,這意味着我必須手動轉換格式。 – Bill 2013-04-22 18:43:08

+0

Nah,用記事本++和正則表達式查找並替換逗號和換行符。然後選擇複製並粘貼列名前面的所有值。 – SumGuy 2013-04-22 18:46:11

+0

如果插入全部放在同一張表中,那麼只需更改第一個。 – SumGuy 2013-04-22 18:46:55

0

如果您將第一個(也只是第一個)更改爲SELECT INTO,那麼可以。假設第一個INSERT具有正確的可推導數據類型。請注意,它不會神奇地爲您創建鍵,索引,約束,計算列等。

但是,您的示例還包含領先的DELETE,這使我相信該表已存在。 DELETE刪除表中的所有行,但不會刪除表。如果該表不存在,那麼腳本應該(a)在運行刪除之前檢查它是否存在,並(b)運行第一個命令a SELECT INTO以便創建它。然而,你可能想要定義數據類型(我也很難相信SiteIDDATETIME)。

IF OBJECT_ID('dbo.g_fuel_site') IS NOT NULL 
BEGIN 
    DELETE g_fuel_site; 
END 
ELSE 
BEGIN 
    SELECT SiteID = CONVERT(INT, 1), ... 
    INTO dbo.g_fuel_site 
    WHERE 1 = 0; -- creates table but with 0 rows 
END 

INSERT dbo.g_fuel_site(SiteID, ...) VALUES(...); -- first row 
INSERT ...   
INSERT ... 
+1

它說:在關鍵字'INTO'附近的語法不正確 – Bill 2013-04-22 18:32:48

+0

正確,因爲你必須做更多的事來創建一個SELECT INTO語句,而不僅僅是換出單詞INSERT。 – 2013-04-22 18:34:30

+1

腳本假定我有表格模式,我不知道。 – Bill 2013-04-22 18:36:17