2012-03-23 19 views
17

Aparentemente, no puedo usarlos. Recibo un mensaje de error como:¿Es posible tener tablas temporales en una función?

Uso no válido de un operador de efectuar lado 'SELECT' dentro de una función

Si quiero hacer algo como esto:

select bleh 
    into #temp 
    from Blah 

... dentro de una función.

+2

En su lugar, podría usar una variable de tabla. –

Respuesta

25

No, por this thread where the same question was asked, no se puede, pero se puede utilizar un table variable

DECLARE @MyTempTableVariable TABLE (SCHEMA) 

INSERT INTO @MyTempTableVariable 
SELECT bleh 
FROM bleh 
+0

El error de cardinalidad es la razón principal por la que queremos reemplazar la variable de tabla con tabla temporal en una función SQL DB. Sin embargo, hay una solución para este problema, como se describe en detalle aquí: http: //blogs.msdn.com/b/blogdoezequiel/archive/2012/12/01/table-variables-and-row-estimations.aspx#.VGC5oMnm7HS Agregar OPCIÓN (RECOMPRA) a la instrucción donde se usa la variable de tabla puede mejorar el rendimiento. – Vladislav

1

También puede hacerlo con un CTE. Ver el navegador de plantillas en SSMS. IntelliSense confunde el problema y mostrará un error hasta que complete el CTE y la siguiente inserción/selección, pero funcionará.

+0

Esto debería haber sido un comentario, en lugar de una respuesta. –

+0

@MohammadAkbari: No estoy de acuerdo. Agrega una alternativa muy válida a la otra respuesta. – davidhigh

+2

@Lew Wolf: un ejemplo o algún fragmento de código sería bueno, sin embargo. – davidhigh

Cuestiones relacionadas