0

这可能吗?我有一个很大的 .sql 文件,里面充满了没有数据库模式的 Insert Into 语句。我可以即时创建表吗?

这是一个例子:

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

编辑:没有桌子!脚本假设我这样做了!

4

2 回答 2

1

Aaron 以 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 包含以后插入期望的所有列时才有效。

于 2013-04-22T18:33:43.430 回答
0

如果您将第一个(并且只有第一个)更改为SELECT INTO,是的。假设第一个INSERT具有正确可推导的数据类型。请注意,它不会神奇地为您创建键、索引、约束、计算列等。

但是,您的示例还包括一个前导DELETE,这使我相信该表已经存在。DELETE从表中删除所有行,它不会删除表。如果该表不存在,那么您的脚本应该 (a) 在运行删除之前检查它是否存在,并且 (b) 运行第一个命令 aSELECT INTO以便它创建它。但是,您可能想要定义数据类型(我也很难相信这SiteID是 a 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 回答