Передача параметра Table Valued в хранимую процедуру - PullRequest
4 голосов
/ 21 апреля 2010

Вот пример того, как использовать табличные параметры в хранимой процедуре SQL Server 2008 с использованием .NET

А вот список типов параметров в CF9 .

В: Возможно ли, чтобы ColdFusion передал табличный параметр в хранимую процедуру Microsoft SQL Server 2008?

Ответы [ 4 ]

7 голосов
/ 25 января 2012

Краткий ответ: Нет поддержки, она должна, проголосуйте за нее!

Длинный ответ: Coldfusion может использовать JDBC, который еще не поддерживает TVP, но должен. Проголосуйте за эту функцию здесь: http://mssqlconn.uservoice.com/forums/113295-feature-feedback/suggestions/2269687-table-valued-parameters-tvp-support-in-jdbc

XML будет работать, но использование TVP упрощает чтение, запись, просмотр и отладку кода клиента и sproc. В большинстве случаев это также быстрее, в зависимости от реализации API.

К вашему сведению, использование Oracle не лучше. У них есть тип данных ARRAY SQL (который наиболее близок к TVP). Он также не поддерживается JDBC: Использование объектов Array

4 голосов
/ 22 октября 2013

Я обнаружил этот обходной путь. Вы можете вызвать хранимую процедуру из 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>
2 голосов
/ 05 декабря 2011

Я думаю, что для того же вам нужен тип данных 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
2 голосов
/ 21 апреля 2010

Не уверен.

Если вам необходимо передать таблицу информации, вероятно, лучше всего использовать тип данных XML.

Пример кода здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...