Sql server 如何从自动生成和已创建的数据中插入数据
我有一个表没有主键,外键表名是C_User_Credentials我有附加的屏幕截图,请查看更多详细信息 我写了一个存储过程代码是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 *
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