variable tabla into contador sql-server tsql insert table-variable

sql-server - into - variable tabla t sql



SELECT INTO una variable de tabla en T-SQL (8)

Bien, ahora con suficiente esfuerzo puedo insertarlo en @table usando lo siguiente:

INSERTAR @TempWithheldTable SELECT
a.SuspendedReason, a.SuspendedNotes, a.SuspendedBy, a.ReasonCode FROM OPENROWSET (BULK ''C: / DataBases / WithHeld.csv'', FORMATFILE = N''C: / DataBases / Format.txt '',
ERRORFILE = N''C: / Temp / MovieLensRatings.txt '') COMO a;

Lo principal aquí es seleccionar columnas para insertar.

Obtuve una consulta SELECT compleja, desde la cual me gustaría insertar todas las filas en una variable de tabla, pero T-SQL no lo permite.

En la misma línea, no puede usar una variable de tabla con las consultas SELECT INTO o INSERT EXEC. http://odetocode.com/Articles/365.aspx

Breve ejemplo:

declare @userData TABLE( name varchar(30) NOT NULL, oldlocation varchar(30) NOT NULL ) SELECT name, location INTO @userData FROM myTable INNER JOIN otherTable ON ... WHERE age > 30

Los datos en la variable de la tabla se usarían más adelante para insertarlos / actualizarlos nuevamente en diferentes tablas (en su mayoría, copias de los mismos datos con actualizaciones menores). El objetivo de esto sería simplemente hacer que el script sea más legible y más fácil de personalizar que haciendo SELECT INTO directamente en las tablas correctas. El rendimiento no es un problema, ya que el número de rowcount es bastante pequeño y solo se ejecuta manualmente cuando es necesario.
... o solo dime si lo estoy haciendo todo mal.


El propósito de SELECT INTO es (según los documentos, mi énfasis)

Para crear una nueva tabla a partir de valores en otra tabla

¡Pero ya tienes una mesa objetivo! Así que lo que quieres es

La INSERT agrega una o más filas nuevas a una tabla

Puede especificar los valores de los datos de las siguientes maneras:

...

Al utilizar una subconsulta SELECT para especificar los valores de los datos para una o más filas, como:

INSERT INTO MyTable (PriKey, Description) SELECT ForeignKey, Description FROM SomeView

Y en esta sintaxis, se permite que MyTable sea ​​una variable de tabla.


Intenta algo como esto:

DECLARE @userData TABLE( name varchar(30) NOT NULL, oldlocation varchar(30) NOT NULL ); INSERT INTO @userData (name, oldlocation) SELECT name, location FROM myTable INNER JOIN otherTable ON ... WHERE age > 30;


Podrías intentar usar tablas temporales ...

SELECT name, location INTO #userData FROM myTable INNER JOIN otherTable ON ... WHERE age>30

Omite el esfuerzo de declarar la tabla de esa manera ... Ayuda para consultas adhoc ... Esto crea una tabla temporal local que no será visible para otras conexiones a menos que use la misma conexión en su aplicación.

Si requiere variables se puede declarar de esta manera:

DECLARE @userData TABLE( name varchar(30) NOT NULL, oldlocation varchar(30) NOT NULL ); INSERT INTO @userData SELECT name, location FROM myTable INNER JOIN otherTable ON ... WHERE age > 30;


Primero crea una tabla temporal:

Paso 1:

create table #tblOm_Temp ( Name varchar(100), Age Int , RollNumber bigint )

** Paso 2: ** Insertar algún valor en la tabla Temp.

insert into #tblom_temp values(''Om Pandey'',102,1347)

Paso 3: Declare una variable de tabla para contener datos de la tabla temporal.

declare @tblOm_Variable table( Name Varchar(100), Age int, RollNumber bigint )

Paso 4: seleccione el valor de la tabla temporal e insértelo en la variable de tabla.

insert into @tblOm_Variable select * from #tblom_temp

Finalmente el valor se inserta desde una tabla temporal a una variable de tabla

Paso 5: Se puede verificar el valor insertado en la variable de tabla.

select * from @tblOm_Variable


También puede utilizar expresiones de tabla comunes para almacenar conjuntos de datos temporales. Son más elegantes y ad hoc:

WITH userData (name, oldlocation) AS ( SELECT name, location FROM myTable INNER JOIN otherTable ON ... WHERE age>30 ) SELECT * FROM userData -- you can also reuse the recordset in subqueries and joins


Trate de usar INSERT lugar de SELECT INTO :

INSERT @UserData SELECT name, location etc.


Una razón para usar SELECT INTO es que le permite usar IDENTIDAD:

SELECT IDENTITY(INT,1,1) AS Id, name INTO #MyTable FROM (SELECT name FROM AnotherTable) AS t

Esto no funcionaría con una variable de tabla, lo cual es muy malo ...