这是CF9中参数类型的列表。
问:ColdFusion是否可以将表值参数传递给Microsoft SQL Server 2008存储过程? br />
#1 楼
不确定。如果需要传递信息表,最好的选择是使用XML数据类型。
此处的代码示例。
#2 楼
简短的答案:不支持,应该投票!长的答案:
Coldfusion可以使用JDBC,它尚不支持TVP,但应该支持。在此处为功能投票:
http://mssqlconn.uservoice.com/forums/113295-feature-feedback/suggestions/2269687-table-valued-parameters-tvp-support-in-jdbc
XML可以使用,但是使用TVP可以使客户端代码和proc代码更易于阅读,编写,检查和调试。在大多数情况下,取决于API的实现,它也更快。
FYI,使用Oracle并没有更好的选择。它们具有ARRAY SQL数据类型(最接近TVP)。 JDBC也不支持它:使用数组对象
#3 楼
我发现了这种解决方法。您可以从cfquery中调用存储过程,这样就可以传入表值参数TVP。<cfquery datasource="" name="">
DECLARE @return_value int
-- Create table value parameter
DECLARE @DataTVP tDataTable;
--Build Table
INSERT INTO @DataTVP(DataId)
VALUES (1),(2),(3)
EXEC @return_value = P_DeleteItems
@tvpData = @DataTVP --Pass table into Stored Procedure
SELECT 'Return Value' = @return_value
</cfquery>
#4 楼
我认为您同样需要XML数据类型。我在这里提供一个例子。 ##-- Create a Database
CREATE DATABASE DataTableTest
USE DataTableTest
GO
--Create the sample tables
CREATE TABLE Employees (
EmployeeID BIGINT IDENTITY(1,1),
EmployeeName VARCHAR(50),
DepartmentID BIGINT )
CREATE TABLE Departments (
DepartmentID BIGINT IDENTITY(1,1),
DepartmentName VARCHAR(50) )
GO
-- Populate the Sample Tables
INSERT INTO Departments ( DepartmentName)
SELECT 'IT'
INSERT INTO Employees (EmployeeName, DepartmentID )
SELECT 'JCB', 1
GO
现在让我们创建一个存储过程,该存储过程返回两个结果集。
CREATE PROCEDURE GetEmployeeInfo
AS
SET NOCOUNT ON
SELECT EmployeeName, DepartmentID
FROM Employees
WHERE EmployeeID = 1
SELECT DepartmentName FROM Departments
WHERE DepartmentID = 1
GO
我们创建下一个接受XML参数的存储过程。此过程会将XML参数中的数据插入Employee表。
CREATE PROCEDURE ProcessXml
(
@data XML
)
AS
INSERT INTO Employees(EmployeeName, DepartmentID)
SELECT
x.d.value('EmployeeName[1]','VARCHAR(50)') AS EmployeeName,
x.d.value('DepartmentID[1]','INT') AS DepartmentID
FROM @data.nodes('/NewDataSet/Table') x(d)
GO
评论
哇user2906092,那很有趣。这是一种解决方法。现在,我不明白select'return value'= @ return_value语句。
–菲利普·森(Phillip Senn)
13-10-23在20:19
仅当您的存储过程使用返回值时才需要返回值,该返回值有时用于错误检查并在sproc无法运行时返回消息。看看cfstoredproc的returncode = true
–加里·希克斯(Gary Hiscox)
2014年2月12日在20:21