2017-10-18 107 views
0

我有这样的SPSQL复制多个记录时生成唯一的ID

CREATE PROCEDURE ApplyExistingImageAcrossModel 
@capidfrom int, 
@capidto int, 
@type int 
AS 
BEGIN 

DECLARE @imageid uniqueidentifier 

INSERT INTO ImageMetaData 
(ImageId,CapId,[Type],Source,DateAdded,OriginalFileName,OriginalUrl,isDefault,Height,Width,ViewType,CapImageId,islive) 
SELECT @imageid,@capidto,@type,source,GETDATE(),originalfilename,originalurl,isdefault,height,width,viewtype,capimageid,islive 
FROM ImageMetaData 
WHERE [type] = @type AND capid = @capidfrom 

INSERT INTO ImageData 
(ImageId,ImageBinary) 
SELECT @imageid,ImageBinary 
FROM ImageData A 
LEFT JOIN ImageMetaData B 
ON A.ImageId = B.ImageId 
WHERE B.[type] = @type 
AND B.capid = @capidfrom 

END 

的问题是,选择可以为特定的capid返回多个记录,我想复制它们,但每个记录都需要一个独特的@imageid,我只生成一次,我需要在两个表中使用imageid

感谢

+0

我不确定它是否是重复的 - 如果是这样,请让我知道:https://stackoverflow.com/a/34832231/3094533 –

+1

我会建议使用比A,B更好的别名。http: //sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-table-aliases-like-abc-or-t1-t2-t3.aspx您是否考虑过使用你最初插入的OUTPUT子句? https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql –

回答

0

而不是创建一个变量,声明表变量来存储唯一的ID。然后,使用OUPUT子句记录所有ID。事情是这样的:

DECLARE @DataSource TABLE 
(
    @imageid uniqueidentifier 
); 

INSERT INTO ImageMetaData(ImageId,CapId,[Type],Source,DateAdded,OriginalFileName,OriginalUrl,isDefault,Height,Width,ViewType,CapImageId,islive) 
OUTPUT inserted.ImageId 
INTO @DataSource (@imageid) 
SELECT NEWID(),@capidto,@type,source,GETDATE(),originalfilename,originalurl,isdefault,height,width,viewtype,capimageid,islive 
FROM ImageMetaData 
WHERE [type] = @type AND capid = @capidfrom 

现在,在@DataSource表我们有插入imageID秒。不管你想要什么,都要和他们一起做