我正在尝试生成新的GUID并将该值分配给NewReportID
。但是,我不确定如果我在@NewReportID
过程中的任何地方替换newid()
,它将为每一行生成一个新的GUID。
我只需生成一个GUID并为NewReportID指定GUID的值?
我尝试过变量声明:@NewReportID varchar(50)=newid()
但这给了我很多错误。
ALTER PROCEDURE [dbo].[AmendInsertDuplicateFields] (@ReportID varchar(50), @NewReportID varchar(50))
AS
Begin
INSERT INTO [MVCOmar].[dbo].[PrideMVCCollisionBegin]
([ReportID], [LocalIncidentNum], [version], [MTOReferenceNo], [Submitted])
SELECT @NewReportID, [LocalIncidentNum], [version], [MTOReferenceNo], [Submitted]
FROM [MVCOmar].[dbo].[PrideMVCCollisionBegin] WHERE [ReportID]=@ReportID;
INSERT INTO [MVCOmar].[dbo].[PrideMVCCollisionDetails] ([Classification] ,
[ReportType] ,[CollisionDate] ,[CollisionDay] ,
[CollisionTime] ,[CollisionLoc] ,[ImpactLoc] ,[ThruLaneNo] ,
[Weather1] ,[Weather2] ,[Light] ,[TrafficControl] ,
[TrafficControlCond] ,[RoadChar1] ,[RoadChar2] ,
[RoadSurface1] ,[RoadSurface2] ,[RoadCond1] ,[RoadCond2] ,
[RoadSurfaceCond1] ,[RoadSurfaceCond2] ,[RoadAlignment1] ,
[RoadAlignment2] ,[RoadPavementMarking1] ,[RoadPavementMarking2] ,
[OtherCollisionLoc] ,[OtherImpactLoc] ,[OtherWeather1] ,
[OtherWeather2] ,[OtherLight] ,[OtherTraffic] ,
[OtherRoadSurface1] ,[OtherRoadSurface2] ,[OtherRoadSurfaceCond1] ,
[OtherRoadSurfaceCond2] ,[OtherClassification] ,
[DiagramDescription] ,[R1NumLanes] ,[R1MaxSpeed] ,
[R1AdviseSpeed] ,[R2NumLanes] ,[R2MaxSpeed] ,[R2AdviseSpeed] ,
[NumInvolved] ,[OfficerID] ,[Checked] ,[LastModified] ,
[LastModifiedBy] ,[StartTime] ,[EndTime] ,[Display] ,
[ReportID] ,[InitialImpactType] ,[OtherInitialImpactType] ,
[SelfReported])
SELECT [Classification] ,[ReportType] ,[CollisionDate] ,
[CollisionDay] ,[CollisionTime] ,[CollisionLoc] ,[ImpactLoc] ,
[ThruLaneNo] ,[Weather1] ,[Weather2] ,[Light] ,
[TrafficControl] ,[TrafficControlCond] ,[RoadChar1] ,
[RoadChar2] ,[RoadSurface1] ,[RoadSurface2] ,[RoadCond1] ,
[RoadCond2] ,[RoadSurfaceCond1] ,[RoadSurfaceCond2] ,
[RoadAlignment1] ,[RoadAlignment2] ,[RoadPavementMarking1] ,
[RoadPavementMarking2] ,[OtherCollisionLoc] ,[OtherImpactLoc] ,
[OtherWeather1] ,[OtherWeather2] ,[OtherLight] ,
[OtherTraffic] ,[OtherRoadSurface1] ,[OtherRoadSurface2] ,
[OtherRoadSurfaceCond1] ,[OtherRoadSurfaceCond2] ,
[OtherClassification] ,[DiagramDescription] ,[R1NumLanes] ,
[R1MaxSpeed] ,[R1AdviseSpeed] ,[R2NumLanes] ,[R2MaxSpeed] ,
[R2AdviseSpeed] ,[NumInvolved] ,[OfficerID] ,[Checked] ,
[LastModified] ,[LastModifiedBy] ,[StartTime]
End
答案 0 :(得分:3)
使用正确的数据类型? uniqueidentifier
declare @NewReportID uniqueidentifier
set @NewReportID = NEWID()
你使用什么样的sql-server?我试过你说的错误:
我已尝试过变量声明:@NewReportID varchar(50)= newid()但这给了我很多错误。
但这对我有用
答案 1 :(得分:2)
DECLARE @NewReportID VARCHAR(50)
SET @NewReportID = cast(NEWID() AS VARCHAR(50))
答案 2 :(得分:2)
是否有理由使用VARCHAR()
?
理想情况下,你会使用uniqueidentifier
类型。
DECLARE
@myGUID uniqueidentifier
SELECT
@myGUID = NewID()
修改强>
当 吮吸VARCHAR()
时,您可以解决将其转换为字符串的问题。这比任何真正的技术问题更浪费空间......
DECLARE
@myGUID VARCHAR(50)
SELECT
@myGUID = CONVERT(varchar(50), @myid)
在您的SP中,@ newReportID是一个输入参数。因此,您可以将SP更改为不需要输入,或者在输入之前设置它
使用当前的SP ...
DECLARE
@myGUID VARCHAR(50)
SELECT
@myGUID = CONVERT(varchar(50), @myid)
EXEC [dbo].[AmendInsertDuplicateFields] @reportID, @myGUID
更改SP ...
ALTER PROCEDURE [dbo].[AmendInsertDuplicateFields] (@ReportID varchar(50))
AS
BEGIN
DECLARE
@NewReportID VARCHAR(50)
SELECT
@NewReportID = CONVERT(varchar(50), @myid)
-- Then use @NewReportID onwards in the SP
只用一个参数调用SP ......
EXEC [dbo].[AmendInsertDuplicateFields] @reportID