IDとして使用される列の次の値を決定するためのサブクエリを含むinsert文がありますが、悲しいことにnvarchar(20)型です。方法)。カーソルを使用してループと挿入文を使用する
私はAssetNoフィールドに、次の増分番号を生成することができるようにする必要があります。次の数値は数値としてキャストすることができますが、複数のレコードを挿入する場合は、次の値を取得します。したがって、私はカーソルを追加する必要があると思っていますが、ほとんど経験がありません。次のように
私のコードは次のとおりです。
BEGIN
INSERT INTO tbAsset
(
AssetUID,
AssetNo,
LocationParentID,
LocationID,
LocationDescription,
Quantity,
UnitTypeID,
ElementID,
LifeExpectancy,
InstalledDate,
OutsideHour,
Status,
BookingResource,
IsSystem,
IsPartOfSystem,
AssetClassID,
LastUpdate,
LastUpdateUser,
SystemConfidence,
UserConfidence,
IsOriginalComponent,
ClientCode,
ApplicationResource
)
SELECT
NEWID() AS Expr1,
(
SELECT
MAX(CASE
WHEN ISNUMERIC(AssetNo) = 1
THEN CAST(AssetNo AS INT)
ELSE NULL
END) + 1 AS 'AssetNo'
FROM tbAsset
) AS Expr2,
Template_Structure_Location.Location_Type,
Template_Structure_Location.Client_Location_Ref,
Template_Structure_Location.Location,
Template_Survey.Quantity,
tbUnitType.UnitTypeID,
dbo_Item.CLIENT_ITEM_REF,
dbo_ProcedureX.LIFE_EXPECTANCY,
NULL AS Expr3,
'0' AS Expr4,
'0' AS Expr5,
'0' AS Expr6,
'0' AS Expr7,
'0' AS Expr8,
'2' AS Expr9,
GETDATE() AS Expr10,
'PDS' AS Expr11,
'100' AS Expr12,
'100' AS Expr13,
'0' AS Expr14,
'0' AS Expr15,
'0' AS Expr16
FROM dbo_Item
INNER JOIN Template_Survey ON dbo_Item.Itemref = Template_Survey.ItemRef
INNER JOIN Template_Structure_Location ON Template_Survey.TEMPLATE_STRUCTURE_LOCATION_REF = Template_Structure_Location.TEMPLATE_STRUCTURE_LOCATION_REF
INNER JOIN Template_Structure ON Template_Structure_Location.TEMPLATE_STRUCTURE_REF = Template_Structure.TEMPLATE_STRUCTURE_REF
INNER JOIN Template_Details ON Template_Structure.TEMPLATE_DETAILS_REF = Template_Details.TEMPLATE_DETAILS_REF
AND Template_Structure.TEMPLATE_DETAILS_REF = Template_Details.TEMPLATE_DETAILS_REF
INNER JOIN dbo_ProcedureX ON dbo_Item.Itemref = dbo_ProcedureX.Itemref
INNER JOIN tbUnitType ON dbo_Item.IPF_Element = tbUnitType.UnitDescription
LEFT OUTER JOIN tbAsset AS tbAsset_1 ON Template_Survey.K2ref = tbAsset_1.AssetNo
WHERE(Template_Details.Status = N'Signed Off')
AND (Template_Details.StatusME = N'Signed Off')
AND (Template_Survey.K2ref IS NULL)
AND (dbo_ProcedureX.Replacement = 1);
END;
今日のヒント:テーブルエイリアス! – jarlh
このような大きな質問を投稿する前にhttps://stackoverflow.com/help/mcveを読んでください。 – jarlh
これはSQL Server 2012です - 見落としに対するお詫び –