【问题标题】:SQL ID from table posts same ID to all other coldfusion entries per transaction表中的 SQL ID 将相同的 ID 发布到每个事务的所有其他冷融合条目
【发布时间】:2015-04-25 15:05:31
【问题描述】:

如何触发我的事务表中的 ID 在每个会话的每个表的所有条目上都相同?我正在尝试向许多表中插入大量信息,但试图通过 TransactionID 将所有表链接在一起,并且正在努力研究如何使用第一个条目创建 TransactionID,然后抓取该条目并将其用于所有其他表条目。

(这是我创建事务的插入。这应该会自动在我的事务表中创建一个 ID,因为 ID 是我在事务表中的主键,并且 IsIdentity 是并且递增一)

<cfquery datasource="Titlesbymail" name="InsertEntry">
 INSERT INTO dbo.Transaction (Type, OwnerType)
 VALUES (
    <cfqueryparam value='NonLeased' cfsqltype='cf_sql_varchar' />
   , <cfqueryparam value='Owner' cfsqltype='cf_sql_varchar' />
 )
</cfquery>

然后创建事务表:
编号:1
类型:非租赁
OwnerType:所有者

我正在尝试弄清楚如何将相同的事务 ID 与我的下一个条目一起插入到我的其他 6 个表中(如果表存在)

<cfquery datasource="Titlesbymail" name="CustomerInsertEntry">
 INSERT INTO dbo.Customer (TransactionID, ID, FirstName, LastName)
 VALUES (
    <cfqueryparam value= **'(ID from Transaction Table)'** cfsqltype='cf_sql_int' />
   , <cfqueryparam value='1' cfsqltype='cf_sql_int' />
   , <cfqueryparam value='#session.checkout.info.firstname_1#' cfsqltype='cf_sql_varchar' />
   , <cfqueryparam value='#session.checkout.info.lastname_1#' cfsqltype='cf_sql_varchar' />
 )
</cfquery>

这对我来说是全新的,并且已经做了很多研究,我只是不断遇到触发器的 sql 命令,但不知道这如何适用于我这样的冷融合设置。

【问题讨论】:

  • "Transaction" 是 SQL Server 中的保留字,因此不适合用作表名。考虑重命名表。此外,其中一个查询参数使用了不正确的类型。它应该是cf_sql_integer,而不是cf_sql_int。不幸的是,CF 不会警告您拼写错误,因此您可以输入“cf_sql_grapefruit”并且 CF 服务器会允许它。但是,它默认将参数作为字符串传递,which is undesirable

标签: sql-server coldfusion


【解决方案1】:

使用cfquery 时,您可以使用 results 属性根据已运行的查询返回信息。此信息的一部分是GENERATEDKEY。 然后,您可以将此 GENERATEDKEY 分配给一个变量,并稍后在您的代码中使用它。

所以首先你需要将结果属性添加到你的第一个cfquery

<cfquery datasource="Titlesbymail" name="InsertEntry" result="transactionResult">
 INSERT INTO dbo.Transaction (Type, OwnerType)
 VALUES (
    <cfqueryparam value='NonLeased' cfsqltype='cf_sql_varchar' />
   , <cfqueryparam value='Owner' cfsqltype='cf_sql_varchar' />
 )
</cfquery>

然后分配一个变量以使用结果中的GENERATEDKEY(或直接使用结果变量)

&lt;cfset theID = transactionResult.GENERATEDKEY&gt;

然后,您可以在代码中的任何其他位置使用此变量。

<cfquery datasource="Titlesbymail" name="CustomerInsertEntry">
 INSERT INTO dbo.Customer (TransactionID, ID, FirstName, LastName)
 VALUES (
    <cfqueryparam value='#theID#' cfsqltype='cf_sql_integer' />
   , <cfqueryparam value='1' cfsqltype='cf_sql_integer' />
   , <cfqueryparam value='#session.checkout.info.firstname_1#' cfsqltype='cf_sql_varchar' />
   , <cfqueryparam value='#session.checkout.info.lastname_1#' cfsqltype='cf_sql_varchar' />
 )
</cfquery>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多