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 tablaPuede 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 ...