sql - stored - Edad no devuelta al ejecutar una consulta
retornar valor stored procedure sql server (1)
Como @ar34z ha señalado en los comentarios;
"no estás seleccionando la columna, pero estás creando una nueva"
Una vez que agrega cualquier cálculo a un campo en una tabla, está creando lo que se conoce como "Columna DateOfBirth
" o "Expresión" , especificar DateOfBirth
como un campo con nombre no va a funcionar porque ADO no sabe acerca de la columna DateOfBirth
solo una columna calculada sin nombre.
Idealmente, debe usar un alias para que las columnas calculadas sean más fáciles de reconocer
SELECT DATEDIFF(yyyy, DateOfBirth, GETDATE()) [DateOfBirth]
FROM employees
o
SELECT DATEDIFF(yyyy, DateOfBirth, GETDATE()) AS [DateOfBirth]
FROM employees
ambos funcionan bien con SQL Server y nunca han tenido problemas al usar cualquiera de las variantes.
Como la columna calculada está devolviendo la edad (no la fecha de nacimiento) , podría alias la columna [Age]
luego usar <%= rs("Age") %>
para ADODB.Recordset
desde ADODB.Recordset
.
Nota al margen: Como @ damien-the-unbeliever ha mencionado en los comentarios que su cálculo de Age no es muy preciso, curiosamente en este punto hay una pregunta completamente diferente en StackOverFlow con algunas respuestas interesantes (simplemente no acepte la respuesta aceptada como evangelio) .
- Cómo calcular la edad (en años) según la fecha de nacimiento y getDate ()
Tal como está (y esta es solo mi opinión personal), esta respuesta ( https://stackoverflow.com/a/1572938/692942 ) es la mejor del grupo.
Solo para completar, también puede indicar al ADODB.Recordset
que devuelva los campos por posición ordinal en lugar de nombrar al pasar un índice basado en 0 de la posición del campo en este caso.
<%= rs(0) %>
funcionaría y devolvería el primer campo en SELECT
.
Tomando todo esto en cuenta, mi solución sugerida (para el problema inmediato) sería;
<%
'' calculate age of employee
bsql = "SELECT DATEDIFF(yyyy, DateOfBirth, GETDATE()) [Age] FROM employees"
Set brs = Server.CreateObject("ADODB.Recordset")
brs.open bsql, dbconn, adOpenKeyset, adLockPessimistic
Response.Write rs("Age")
%>
Notará que he reemplazado valores numéricos en brs.Open()
Constantes DLL de ADODB para ver cómo usarlos. Le recomiendo leer el uso de METADATA para importar las constantes DLL .
¿Cuál podría ser el problema aquí cuando ejecuto el siguiente código ya que no devuelve la edad?
<% '' calculate age of employee
bsql = "select DATEDIFF(yyyy,DateOfBirth,GETDATE()) from employees "
set brs = Server.CreateObject("ADODB.Recordset")
brs.open bsql, dbconn, 1,2%>
<%=rs("DateOfBirth") %>