c# - Pasar DataTable al procedimiento almacenado como argumento
sql-server tsql (2)
Tengo una tabla de datos creada en C #.
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Age", typeof(int));
dt.Rows.Add("James", 23);
dt.Rows.Add("Smith", 40);
dt.Rows.Add("Paul", 20);
Quiero pasar esto al siguiente procedimiento almacenado.
CREATE PROCEDURE SomeName(@data DATATABLE)
AS
BEGIN
INSERT INTO SOMETABLE(Column2,Column3)
VALUES(......);
END
Mi pregunta es: ¿cómo insertamos esas 3 tuplas en la tabla SQL? ¿Necesitamos acceder a los valores de columna con el operador de punto? o hay alguna otra forma de hacer esto?
Primero necesita crear un tipo de tabla definida por el usuario que se asemeje a su tabla actual. Vea el ejemplo a continuación,
CREATE TYPE SomeType AS TABLE
(
C1 int,
C2 VARCHAR(50)
)
After this you need to create a stored procedure that takes this table type as parameter.
CREATE PROCEDURE SomeUSP
@tabType SomeType READONLY
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO Yourtable(C1,C2)
SELECT C1,C2 FROM @tabType
END
Eso es todo ... Trabajo hecho :)
Puede cambiar el procedimiento almacenado para aceptar un parámetro valuado como una entrada. Primero, sin embargo, deberá crear un TIPO de tabla definido por el usuario que coincida con la estructura de la tabla de datos C #:
CREATE TYPE dbo.PersonType AS TABLE
(
Name NVARCHAR(50), -- or whatever the length of the `SOMETABLE` column
Age INT
);
Ajuste su SPROC:
CREATE PROCEDURE dbo.InsertPerson
@Person dbo.PersonType READONLY
AS
BEGIN
INSERT INTO SomeTable(Column1, Column2)
SELECT p.Name, p.Age
FROM @Person p;
END
Cuando vincula la tabla de datos al parámetro PROC, debe especificar el parámetro como:
parameter.SqlDbType = SqlDbType.Structured;
parameter.TypeName = "dbo.PersonType";
Consulte también el ejemplo aquí Pasar un parámetro de valor de tabla a un procedimiento almacenado