Sql server 如何从自动生成和已创建的数据中插入数据

Sql server 如何从自动生成和已创建的数据中插入数据,sql-server,stored-procedures,Sql Server,Stored Procedures,我有一个表没有主键,外键表名是C_User_Credentials我有附加的屏幕截图,请查看更多详细信息 我写了一个存储过程代码是 ALTER PROCEDURE [dbo].[usp_Duplicate] @inputkey NVARCHAR(36) , @Formkey NVARCHAR(36) output AS BEGIN DECLARE @Form NVARCHAR(36) SET @Form = NEWID() SELECT *

我有一个表没有主键,外键表名是C_User_Credentials我有附加的屏幕截图,请查看更多详细信息

我写了一个存储过程代码是

ALTER PROCEDURE [dbo].[usp_Duplicate]
      @inputkey NVARCHAR(36)
    , @Formkey NVARCHAR(36) output
AS
BEGIN
    DECLARE @Form NVARCHAR(36)
    SET @Form = NEWID()

    SELECT *
    INTO #s
    FROM [2290_Form]
    WHERE PK_2290F_key = @inputkey

    INSERT INTO [2290_Form]
    VALUES (@Form, (SELECT #s.FK_C_B_key FROM #s), (SELECT #s.is_vin_correction FROM #s), (SELECT #s.is_amendment FROM #s), (SELECT #s.amendment_category FROM #s), (SELECT #s.is_final_return FROM #s), (SELECT #s.first_used_month FROM #s), (SELECT DATEPART(year, GETDATE()) FROM #s), (SELECT #s.tax_amt FROM #s), (SELECT #s.additional_amt FROM #s), (SELECT #s.credit_amt FROM #s), (SELECT #s.payment_mode FROM #s), (SELECT #s.consent_tag FROM #s), (SELECT #s.status FROM #s), GETDATE(), NULL)

    SELECT NEWID() AS Pk
         , @Form AS fk
         , vin
         , category
         , is_logging
         , is_agricultural
         , is_mileage_exceed
         , weight_current
         , weight_old
         , credit_reason
         , buyer
         , effective_date
         , tax_amt
         , GETDATE() AS crn_dt
         , NULL AS upd_dt
    INTO #v
    FROM [2290_Vehicles]
    WHERE FK_2290_F_key = @inputkey

    INSERT INTO [2290_Vehicles] (PK_2290_V_key, FK_2290_F_key, vin, category, is_logging, is_agricultural, is_mileage_exceed, weight_current, weight_old, credit_reason, buyer, effective_date, tax_amt, crn_dt, upd_dt)
    SELECT * FROM #v

    SET @Formkey = @Form


END

在上面的存储过程中,将生成一个表单键。问题是在生成表单键的帮助下,我需要将C_用户_凭证表中的CFK_C_UP_键列和生成的表单_键合并到一个新表中如何操作请帮助我

我不知道您在这里要做什么,但您的过程很简单太复杂了。您不需要创建临时表来保存数据,这样您就可以立即将其转过来并插入到另一个表中。此外,还将guid列定义为nvarchar(36)。这需要隐式转换。如果它们确实是guid,那么应该使用正确的数据类型

ALTER PROCEDURE [dbo].[usp_Duplicate]
      @inputkey NVARCHAR(36)
    , @Formkey NVARCHAR(36) output
AS
BEGIN
    DECLARE @Form NVARCHAR(36)
    SET @Form = NEWID()

     INSERT INTO [2290_Form]
     select @Form
        , FK_C_B_key
        , is_vin_correction
        , is_amendment
        , amendment_category
        , is_final_return
        , first_used_month
        , DATEPART(year, GETDATE())
        , tax_amt
        , additional_amt
        , credit_amt
        , payment_mode
        , consent_tag
        , status
        , GETDATE()
        ,NULL
    from [2290_Form]
    WHERE PK_2290F_key = @inputkey

    INSERT INTO [2290_Vehicles]
    (
        PK_2290_V_key
        , FK_2290_F_key
        , vin
        , category
        , is_logging
        , is_agricultural
        , is_mileage_exceed
        , weight_current
        , weight_old
        , credit_reason
        , buyer
        , effective_date
        , tax_amt
        , crn_dt
        , upd_dt
    )

    SELECT NEWID() AS Pk
         , @Form AS fk
         , vin
         , category
         , is_logging
         , is_agricultural
         , is_mileage_exceed
         , weight_current
         , weight_old
         , credit_reason
         , buyer
         , effective_date
         , tax_amt
         , GETDATE() AS crn_dt
         , NULL AS upd_dt
    FROM [2290_Vehicles]
    WHERE FK_2290_F_key = @inputkey
END

我不知道你想在这里做什么,但你的程序太复杂了。您不需要创建临时表来保存数据,这样您就可以立即将其转过来并插入到另一个表中。此外,还将guid列定义为nvarchar(36)。这需要隐式转换。如果它们确实是guid,那么应该使用正确的数据类型

ALTER PROCEDURE [dbo].[usp_Duplicate]
      @inputkey NVARCHAR(36)
    , @Formkey NVARCHAR(36) output
AS
BEGIN
    DECLARE @Form NVARCHAR(36)
    SET @Form = NEWID()

     INSERT INTO [2290_Form]
     select @Form
        , FK_C_B_key
        , is_vin_correction
        , is_amendment
        , amendment_category
        , is_final_return
        , first_used_month
        , DATEPART(year, GETDATE())
        , tax_amt
        , additional_amt
        , credit_amt
        , payment_mode
        , consent_tag
        , status
        , GETDATE()
        ,NULL
    from [2290_Form]
    WHERE PK_2290F_key = @inputkey

    INSERT INTO [2290_Vehicles]
    (
        PK_2290_V_key
        , FK_2290_F_key
        , vin
        , category
        , is_logging
        , is_agricultural
        , is_mileage_exceed
        , weight_current
        , weight_old
        , credit_reason
        , buyer
        , effective_date
        , tax_amt
        , crn_dt
        , upd_dt
    )

    SELECT NEWID() AS Pk
         , @Form AS fk
         , vin
         , category
         , is_logging
         , is_agricultural
         , is_mileage_exceed
         , weight_current
         , weight_old
         , credit_reason
         , buyer
         , effective_date
         , tax_amt
         , GETDATE() AS crn_dt
         , NULL AS upd_dt
    FROM [2290_Vehicles]
    WHERE FK_2290_F_key = @inputkey
END