Dapper return single value

c# dapper tsql

Pregunta

Quiero realizar esta prueba simple para ver si existe una tabla. Pensé que sería fácil simplemente devolver un valor int dependiendo de si la tabla existe.

Debajo está lo que he intentado y no funciona:

result = connection.ExecuteScalar<int>(@"
IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = '@tableSchema' 
                 AND  TABLE_NAME = '@tableName'))
    RETURN 0;


RETURN 1;
", new { tableSchema, tableName });

Mensaje de error:

Una instrucción RETURN con un valor devuelto no se puede usar en este contexto.

Es algo realmente agradable ...

Respuesta aceptada

ExecuteScalar

ejecuta la consulta y devuelve la primera columna de la primera fila en el conjunto de resultados devuelto por la consulta.

No devuelve el valor de retorno de sus declaraciones SQL. Podrías simplemente usar

SELECT 1
FROM   INFORMATION_SCHEMA.TABLES 
WHERE  TABLE_SCHEMA = @tableSchema
AND    TABLE_NAME   = @tableName

Luego puede usar ExecuteScalar y devolverá 1 si la tabla existe. Tenga en cuenta que también corregí sus parámetros en las declaraciones SQL. No deben estar delimitados por ' .


Respuesta popular

En lugar de usar la instrucción IF..ELSE, puede usar la siguiente consulta y verificar si el resultado es mayor que cero.

SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES  WHERE TABLE_SCHEMA = '@tableSchema' AND      
TABLE_NAME = '@tableName'

Por cierto, su consulta tiene un error de sintaxis, es por eso que está viendo ese error.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué