I ran into a problem trying to return the newly created identity from a table. The identity column was a uniqueidentifier type.
Table structure:
| UniqueID | uniqueidentifier |
| TextField | varchar(50) |
I needed to retrieve the new UniqueID value after an INSERT statement.
The default value for UniqueID is set to newid().
Here is my original code:
<cfquery name="insert" datasource="#DSN#">
INSERT INTO foo (textfield) VALUES ('test1')
SELECT SCOPE_IDENTITY() AS NewUniqueID
</cfquery>
<cfset newid = insert.NewUniqueID>
The newid variable is always an empty string.
I also tried:
<cfquery name="insert" datasource="#DSN#">
INSERT INTO foo (textfield) VALUES ('test1')
SELECT @@IDENTITY AS NewUniqueID
</cfquery>
<cfset newid = insert.NewUniqueID>
No luck. After a little searching I found the solution. SQL Server doesn’t support returning a uniqueidentifier using the traditional methods.
New code:
<cfquery name="insert" datasource="#DSN#"> DECLARE @NewUniqueID uniqueidentifier SET @NewUniqueID = NEWID() INSERT INTO foo (uniqueid,textfield) VALUES (@NewUniqueID,'test1') SELECT @NewUniqueID AS NewUniqueID </cfquery> <cfset newid = insert.NewUniqueID>
An information technology professional with twenty six years experience in systems administration, computer programming, requirements gathering, customer service, and technical support.
0 Comments