テーブルからアイテムをコピーするストアドプロシージャを作成し、従属テーブルのサブアイテムを作成します。 私の例では、 "InstanceID"というキーを持ち、テーブル "CustomField"に複数のサブアイテムがある "Instance"というテーブルがあります。 "CustomField"には、テーブル "CustomFieldData"に複数のサブアイテムがあり、キーフィールド "CustomFieldID"で結合されています。T-SQLストアドプロシージャでサブセレクトから値を選択することができます
私はインスタンスをコピーし、新しいInstanceIDを返しますストアドプロシージャの後に実行されるCustomFieldとCustomFieldDataからエントリをコピーするストアドプロシージャを作成しました。 最初の部分 - CustomFieldのコピーが動作します。 しかし、CustomFieldDataのコピーが付属しています。 ここでは、次のサブ選択から値(= customfieldidentity)をINSERTに使用したいと考えています。 これは可能ですか? 実際の名前customfieldidentityは機能しません。
ありがとうございます! EXISTS (Sub-Query)
は、外側のクエリのために見えないよう
USE OneWhoIsWho;
IF OBJECT_ID('dbo.sp_CopyCustomFieldsToInstance') IS NULL -- Check if SP Exists
EXEC ('CREATE PROCEDURE dbo.sp_CopyCustomFieldsToInstance AS SET NOCOUNT ON;') -- Create dummy/empty SP
GO
ALTER PROCEDURE dbo.sp_CopyCustomFieldsToInstance
@instanceId int,
@newInstanceId int
AS
BEGIN
BEGIN TRANSACTION T1
BEGIN TRY
-- Copy custom fields
INSERT INTO [dbo].[CustomField]
([InstanceID]
,[iFieldType]
,[iFieldPosition]
,[iVisibility]
,[txtGUIDescription])
SELECT
@newInstanceId
,[iFieldType]
,[iFieldPosition]
,[iVisibility]
,[txtGUIDescription]
FROM [dbo].[CustomField]
WHERE [dbo].[CustomField].[InstanceID][email protected]
-- Copy custom field data
INSERT INTO [dbo].[CustomFieldData]
([CustomFieldID]
,[txtCustomFieldData])
SELECT
customfieldidentity
,[txtCustomFieldData]
FROM dbo.CustomFieldData
WHERE EXISTS
(SELECT [CustomFieldID] AS customfieldidentity
,[InstanceID]
,[iFieldType]
,[iFieldPosition]
,[iVisibility]
,[txtGUIDescription]
FROM [dbo].[CustomField]
WHERE dbo.CustomField.InstanceID = @newInstanceId)
COMMIT TRANSACTION T1
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION T1
END CATCH
END;
GO
「動作しませんか?」と定義できますか?また、私はここでtry-squelchのアンチパターンと呼んでいるものを持っています。エラーが発生した場合は、トランザクションをロールバックするだけです。エラーをログに記録したり、システムやユーザーに何か問題があったことを知らせたりしない限り、失敗したことは決して分かりません。あなたは本当にsp_接頭辞を避けるべきです(または接頭辞を完全に避けるべきです)。 http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix –
「機能しません」とは、サブセレクトから列customfieldidentityを取得したいので、そのストアドプロシージャを実行できないことを意味します。 –
あなたのINSERTのEXISTSステートメントでフィールドを使用することはできません – JamieD77