I'm trying to establish a NEWID()
(copy) and getting error that uniqueidentifier
is incompatible with int
- what am I doing wrong?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ReleasedVersionCopy]
AS
INSERT INTO Template (Template_Name, DeptID, TemplateOwnerID, Created_Date, Last_Update, Released_Date, IsPublished, IsDeleted)
SELECT
Template_Name + ' - Copy3', DeptID, TemplateOwnerID,
Created_Date, Last_Update, Released_Date,
IsPublished, IsDeleted
FROM
Template
WHERE
TemplateID = 2
DECLARE @TemplateID uniqueidentifier;
SET @TemplateID = NEWID()
INSERT INTO Panel (Panel_Name, TemplateID, Panel_Order)
SELECT Panel_Name, @TemplateID, Panel_Order
FROM Panel
WHERE TemplateID = 2
DECLARE @Cntr INTEGER = 0;
WHILE @Cntr < 5
BEGIN;
SET @Cntr = @Cntr + 1;
DECLARE @PanelID uniqueidentifier;
SET @PanelID = NEWID()
INSERT INTO Field (Field_Name, PanelID, FieldTypeID, PlacementH, Field_Order)
SELECT Field_Name, @PanelID, FieldTypeID, PlacementH, Field_Order
FROM Field
INNER JOIN Panel ON Field.PanelID = Panel.PanelID
INNER JOIN Template ON Panel.TemplateID = Template.TemplateID
WHERE Template.TemplateID = 2
END;
This is the error I'm getting:
Msg 206, Level 16, State 2, Procedure ReleasedVersionCopy, Line 16 [Batch Start Line 7]
Operand type clash: uniqueidentifier is incompatible with intMsg 206, Level 16, State 2, Procedure ReleasedVersionCopy, Line 32 [Batch Start Line 7]
Operand type clash: uniqueidentifier is incompatible with int
Here is Template
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Template]
(
[TemplateID] [int] IDENTITY(1,1) NOT NULL,
[Template_Name] [nvarchar](255) NOT NULL,
[DeptID] [int] NOT NULL,
[TemplateOwnerID] [nvarchar](6) NOT NULL,
[Created_Date] [datetime] NOT NULL,
[Last_Update] [datetime] NULL,
[Released_Date] [datetime] NULL,
[IsPublished] [bit] NOT NULL,
[IsDeleted] [bit] NOT NULL,
CONSTRAINT [PK_Template]
PRIMARY KEY CLUSTERED ([TemplateID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Template] WITH CHECK
ADD CONSTRAINT [FK_Template_Dept]
FOREIGN KEY([DeptID]) REFERENCES [dbo].[Dept] ([DeptID])
GO
ALTER TABLE [dbo].[Template] CHECK CONSTRAINT [FK_Template_Dept]
GO
Here is Panel
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Panel]
(
[PanelID] [int] IDENTITY(1,1) NOT NULL,
[Panel_Name] [nvarchar](255) NOT NULL,
[TemplateID] [int] NOT NULL,
[Panel_Order] [int] NOT NULL,
CONSTRAINT [PK_Panel]
PRIMARY KEY CLUSTERED ([PanelID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Panel] WITH CHECK
ADD CONSTRAINT [FK_Panel_Template]
FOREIGN KEY([TemplateID]) REFERENCES [dbo].[Template] ([TemplateID])
GO
ALTER TABLE [dbo].[Panel] CHECK CONSTRAINT [FK_Panel_Template]
GO
Taking this as an example:
[TemplateID] [int] IDENTITY(1,1) NOT NULL
A value is assigned to this column as you are using identity, and this is defined as an int.
To allow this to work you either need to create a new column in the table schemas of a uniqueidentifier or change the table structure to make templateid a guid.
I personally would review why you are trying to use a GUID, but assuming you still need it, add in a new column to accommodate it as when you start to look at indexing having an integer based pk will be beneficial.