0

これは可能ですか?データベース スキーマのない Insert Into ステートメントでいっぱいの大きな .sql ファイルを取得しました。その場でテーブルを作成できますか?

次に例を示します。

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

編集:テーブルはありません!スクリプトは私がそうすると仮定しました!

4

2 に答える 2

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

この後、テーブルが存在します。列の型を推測するだけで、最初の選択に、後で挿入する列がすべて含まれている場合にのみ機能します。

于 2013-04-22T18:33:43.430 に答える
0

最初のもの (および最初のもののみ) を に変更するとSELECT INTO、はい。INSERT最初のデータ型が正しく推定できると仮定します。キー、インデックス、制約、計算列などを魔法のように作成するわけではないことに注意してください。

ただし、あなたの例には先頭の も含まれDELETEているため、テーブルが既に存在すると思われます。DELETEテーブルからすべての行を削除しますが、テーブルは削除しません。テーブルが存在しない場合、スクリプトは (a) 削除を実行する前にテーブルが存在するかどうかを確認し、(b) 最初のコマンド a を実行してテーブルをSELECT INTO作成する必要があります。ただし、おそらくデータ型を定義したいと思うでしょう (また、それが であるとは信じがたいと思いますSiteID) DATETIME

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 ...
于 2013-04-22T18:28:48.280 に答える