| Author |
Topic |
|
simonb256
Starting Member
2 Posts |
Posted - 2008-01-16 : 06:49:07
|
I currently have an odd requirement esp as its my first ever SQL script.At present ignoring all else there are two tables:USE [Live2]GO/****** Object: Table [dbo].[Person] Script Date: 01/16/2008 10:08:05 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[Person]( [Pers_PersonId] [int] NOT NULL, [Pers_CompanyId] [int] NULL, [Pers_PrimaryAddressId] [int] NULL, [Pers_PrimaryUserId] [int] NULL, [Pers_Salutation] [nchar](10) NULL, [Pers_FirstName] [nchar](30) NULL, [Pers_LastName] [nchar](40) NULL, [Pers_MiddleName] [nchar](30) NULL, [Pers_Suffix] [nchar](20) NULL, [Pers_Gender] [nchar](6) NULL, [Pers_Title] [nchar](40) NULL, [Pers_TitleCode] [nchar](40) NULL, [Pers_Department] [nchar](30) NULL, [Pers_Status] [nchar](40) NULL, [Pers_Source] [nchar](40) NULL, [Pers_Territory] [nchar](40) NULL, [Pers_WebSite] [nchar](40) NULL, [Pers_MailRestriction] [nchar](40) NULL, [Pers_PhoneCountryCode] [nchar](5) NULL, [Pers_PhoneAreaCode] [nchar](20) NULL, [Pers_PhoneNumber] [nchar](30) NULL, [Pers_EmailAddress] [nchar](255) NULL, [Pers_FaxCountryCode] [nchar](5) NULL, [Pers_FaxAreaCode] [nchar](20) NULL, [Pers_FaxNumber] [nchar](30) NULL, [Pers_CreatedBy] [int] NULL, [Pers_CreatedDate] [datetime] NULL, [Pers_UpdatedBy] [int] NULL, [Pers_UpdatedDate] [datetime] NULL, [Pers_TimeStamp] [datetime] NULL, [Pers_Deleted] [tinyint] NULL, [Pers_LibraryDir] [nvarchar](255) NULL, [Pers_SegmentID] [int] NULL, [Pers_ChannelID] [int] NULL, [Pers_UploadDate] [datetime] NULL, [pers_SecTerr] [int] NULL, [Pers_WorkflowId] [int] NULL, [pers_Dear] [nchar](40) NULL, [pers_DMCCoID] [nchar](60) NULL, [pers_Legacy_Contact] [nchar](119) NULL, [pers_Accommodation] [nvarchar](40) NULL, [pers_Group] [nchar](119) NULL, [pers_Recruitment] [nvarchar](40) NULL, [pers_Training] [nvarchar](40) NULL, [pers_dob] [nchar](8) NULL, [pers_origin] [nvarchar](40) NULL, [pers_OCR] [numeric](24, 6) NULL, [pers_level] [nvarchar](40) NULL, [pers_booked] [datetime] NULL, [pers_advisor] [int] NULL, [pers_learnertype] [nvarchar](40) NULL, [pers_qualification] [nvarchar](40) NULL, [pers_SecondNVQ] [nvarchar](40) NULL, [pers_learnerNo] [numeric](24, 6) NULL, [pers_inductdate] [datetime] NULL, [pers_initial_iag] [datetime] NULL, [pers_MidPt_iag] [datetime] NULL, [pers_exit_iag] [datetime] NULL, [pers_lmt_advisor] [int] NULL, [pers_Type_c] [nvarchar](40) NULL, [pers_fund_type] [nvarchar](40) NULL, [pers_inductionpack] [datetime] NULL) ON [PRIMARY] Also: USE [Live2]GO/****** Object: Table [dbo].[Person_Link] Script Date: 01/16/2008 10:00:31 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[Person_Link]( [PeLi_PersonLinkId] [int] NOT NULL, [PeLi_PersonId] [int] NOT NULL, [PeLi_CompanyID] [int] NULL, [PeLi_Type] [nchar](40) NULL, [PeLi_CreatedBy] [int] NULL, [PeLi_CreatedDate] [datetime] NULL, [PeLi_UpdatedBy] [int] NULL, [PeLi_UpdatedDate] [datetime] NULL, [PeLi_TimeStamp] [datetime] NULL, [PeLi_Deleted] [tinyint] NULL) ON [PRIMARY] My current script is:INSERT INTO Person_Link (PeLi_PersonLinkId, PeLi_PersonId, PeLi_CompanyID, PeLi_Type, PeLi_CreatedBy, PeLi_CreatedDate, PeLi_UpdatedBy, PeLi_UpdatedDate, PeLi_TimeStamp, PeLi_Deleted)SELECT MAX(pl.PeLi_PersonLinkId) + 1 AS Expr1, pr.Pers_PersonId, '92929' AS Expr2, NULL AS Expr3, '1' AS Expr4, NULL AS Expr5, '1' AS Expr6, NULL AS Expr7, NULL AS Expr8, NULL AS Expr9FROM Person AS pr INNER JOIN Person_Link AS pl ON pr.Pers_PersonId = pl.PeLi_PersonIdWHERE (pr.Pers_CompanyId IS NULL)GROUP BY pr.Pers_PersonId The goal is for every row in the person table which does not have a companyID insert a row to the PersonLink table with a company ID of 92929. Also the colum PersonLinkID in the PersonLink table does not auto ascend.Can someone kindly point the errors of my ways? |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2008-01-16 : 07:08:29
|
| [code]DECLARE @MaxPersonLinkID intSELECT @MaxPersonLinkID =MAX(PeLi_PersonLinkId)FROM Person_LinkSELECT @MaxPersonLinkID=ISNULL(@MaxPersonLinkID,0)[/code]once you get this, you can use two methods depending on whether you use SQL 2000 or 2005sql 2005:-[code]INSERT INTO Person_Link (PeLi_PersonLinkId, PeLi_PersonId, PeLi_CompanyID, PeLi_Type, PeLi_CreatedBy, PeLi_CreatedDate, PeLi_UpdatedBy, PeLi_UpdatedDate, PeLi_TimeStamp, PeLi_Deleted)SELECT @MaxPersonLinkID + t.RowNo AS Expr1, t.Pers_PersonId, '92929' AS Expr2, NULL AS Expr3, '1' AS Expr4, NULL AS Expr5, '1' AS Expr6, NULL AS Expr7, NULL AS Expr8, NULL AS Expr9FROM( SELECT ROW_NUMBER() OVER (ORDER BY pr.Pers_PersonId) AS RowNo,pr.Pers_PersonId FROMPerson AS pr WHERE (pr.Pers_CompanyId IS NULL)GROUP BY pr.Pers_PersonId)t[/code]sql 2000:-[code]CREATE TABLE #Temp(RowNo int IDENTITY(1,1),PersonID int)INSERT INTO #TempSELECT pr.Pers_PersonId FROMPerson AS pr WHERE (pr.Pers_CompanyId IS NULL)GROUP BY pr.Pers_PersonIdINSERT INTO Person_Link (PeLi_PersonLinkId, PeLi_PersonId, PeLi_CompanyID, PeLi_Type, PeLi_CreatedBy, PeLi_CreatedDate, PeLi_UpdatedBy, PeLi_UpdatedDate, PeLi_TimeStamp, PeLi_Deleted)SELECT @MaxPersonLinkID + t.RowNo AS Expr1, t.PersonId, '92929' AS Expr2, NULL AS Expr3, '1' AS Expr4, NULL AS Expr5, '1' AS Expr6, NULL AS Expr7, NULL AS Expr8, NULL AS Expr9FROM #Temp t[/code] |
 |
|
|
simonb256
Starting Member
2 Posts |
Posted - 2008-01-16 : 07:20:44
|
Thanks for that.The way I worked round the problem was to temporarily change the table to "auto increment" on the pers.PersonLinkId field and then use the following:INSERT INTO Person_Link (PeLi_PersonId, PeLi_CompanyID, PeLi_Type, PeLi_CreatedBy, PeLi_CreatedDate, PeLi_UpdatedBy, PeLi_UpdatedDate, PeLi_TimeStamp, PeLi_Deleted)SELECT Pers_PersonId, '92929' AS Expr2, NULL AS Expr3, '1' AS Expr4, NULL AS Expr5, '1' AS Expr6, NULL AS Expr7, NULL AS Expr8, NULL AS Expr9FROM Person AS prWHERE (Pers_CompanyId IS NULL) Then changed it back to non auto incrementing.I came back to update and found your reply. Thank you greatly for your assistance. |
 |
|
|
|
|
|