<cfset qContact = QueryNew(
"id, first_name, last_name, age",
"integer, varchar, varchar, integer"
) />
<cfset QueryAddRow( qContact ) />
<cfset qContact[ "id" ][ 1 ] = JavaCast(
"int",
4
) />
<cfset qContact[ "first_name" ][ 1 ] = JavaCast(
"string",
"Anna"
) />
<cfset qContact[ "last_name" ][ 1 ] = JavaCast(
"string",
"Banana"
) />
<cfquery name="qUpdate" datasource="#REQUEST.DSN.Source#">
DECLARE @contact TABLE (
id INT,
first_name VARCHAR( 30 ),
last_name VARCHAR( 30 ),
age INT
);
DECLARE @id INT ;
INSERT INTO @contact (
id,
first_name
)(
SELECT
4,
'Anna'
);
SET @id = ISNULL(
(
SELECT
id
FROM
@contact
WHERE
id = <cfqueryparam value="#qContact.id#" cfsqltype="cf_sql_integer" />
),
0
);
IF (@id = 0)
BEGIN
INSERT INTO @contact
(
id,
first_name,
last_name,
age
) VALUES (
<cfqueryparam value="#qContact.id#" cfsqltype="cf_sql_integer" />,
<cfqueryparam value="#qContact.first_name#" cfsqltype="cf_sql_varchar" />,
<cfqueryparam value="#qContact.last_name#" cfsqltype="cf_sql_varchar" />,
<cfqueryparam value="#qContact.age#" cfsqltype="cf_sql_integer" />
);
SET @id = @@Identity;
END
ELSE
BEGIN
UPDATE
@contact
SET
<cfif Len( qContact.first_name )>
first_name = <cfqueryparam value="#qContact.first_name#" cfsqltype="cf_sql_varchar" />,
</cfif>
<cfif Len( qContact.last_name )>
last_name = <cfqueryparam value="#qContact.last_name#" cfsqltype="cf_sql_varchar" />,
</cfif>
<cfif IsNumeric( qContact.age )>
age = <cfqueryparam value="#qContact.age#" cfsqltype="cf_sql_integer" />,
</cfif>
id = @id
WHERE
id = @id
;
END
;
</cfquery>