problemas con fechas y sp_executesql

28/04/2008 - 11:04 por Dani | Informe spam
Hola a todos, estoy intentando lo siguiente pero no me funciona, de todas
maneras no encuentro informmacion sobre sp_executesql o por lo menos clara y
facil.

Alguien me puede dar un link para mirar sp_executesql.

Os madno mi código para que se entienda que quiero hacer.

gracias a todo el mundo.

USE [Partes]
GO
/****** Objeto: StoredProcedure [dbo].[sp_InsertarLineaParte_fecha]
Fecha de la secuencia de comandos: 04/28/2008 10:36:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_InsertarLineaParte_fecha]
@fecha smalldatetime
AS
BEGIN

DECLARE @SQLString AS varchar(500);
DECLARE @ParmDefinition NVARCHAR(500);
SET @SQLString = N'UPDATE tbl_partes SET ' +
' Fecha5 = @fechaXX ' +
' WHERE NumParte = 12'

SET @ParmDefinition = '@fechaXX smalldatetime';

EXECUTE sp_executesql @SQLString, @ParmDefinition,
@fechaXX = @fecha;
END


sp_insertarlineaparte_fecha '11/11/2011'

Preguntas similare

Leer las respuestas

#1 Enrique Catala Bañuls
28/04/2008 - 13:48 | Informe spam
Hola dani, dos cosas:
La primera es que datetime y smalldatetime solo soportan las fechas ISO con
formato YYYYMMDD por lo que prueba a lanzar la llamada con 20111111.

Por otro lado, para la sintaxis de sp_executesql está bastante bien
explicada en http://msdn2.microsoft.com/es-es/li...88001.aspx

Por último y aunque esto no tiene que ver con tu pregunta, decirte que el
beneficio de sp_executesql lo tienes si realizas generación de sql desde tu
aplicación cliente y no tienes posibilidad de plantear una arquitectura
basada en procedimientos almacenados (lo deseable). En este caso concreto que
supongo que es un ejemplo estas desaprovechando el beneficio de la
compilación de un procedimiento almacenado.

Lo suyo seria que hicieras:
create PROCEDURE [dbo].[sp_InsertarLineaParte_fecha]
@fecha smalldatetime
AS
BEGIN

UPDATE tbl_partes SET
Fecha5 = @fecha
WHERE NumParte = 12
END

Enrique Catala Bañuls
Solid Quality Mentors



"Dani" wrote:

Hola a todos, estoy intentando lo siguiente pero no me funciona, de todas
maneras no encuentro informmacion sobre sp_executesql o por lo menos clara y
facil.

Alguien me puede dar un link para mirar sp_executesql.

Os madno mi código para que se entienda que quiero hacer.

gracias a todo el mundo.

USE [Partes]
GO
/****** Objeto: StoredProcedure [dbo].[sp_InsertarLineaParte_fecha]
Fecha de la secuencia de comandos: 04/28/2008 10:36:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_InsertarLineaParte_fecha]
@fecha smalldatetime
AS
BEGIN

DECLARE @SQLString AS varchar(500);
DECLARE @ParmDefinition NVARCHAR(500);
SET @SQLString = N'UPDATE tbl_partes SET ' +
' Fecha5 = @fechaXX ' +
' WHERE NumParte = 12'

SET @ParmDefinition = '@fechaXX smalldatetime';

EXECUTE sp_executesql @SQLString, @ParmDefinition,
@fechaXX = @fecha;
END


sp_insertarlineaparte_fecha '11/11/2011'




Respuesta Responder a este mensaje
#2 Dani
28/04/2008 - 20:05 | Informe spam
Hola Enrique, si me interesa hacer esto porque los campos son fecha1, fecha2,
... por lo que pasaré un parametro y lo concatenaré al nombre del campo fecha.

no obstante estoy intentando poner primero el año y tampoco me funciona, ¿no
hay que poner un separador / .

gracias.



"Enrique Catala Bañuls" wrote:

Hola dani, dos cosas:
La primera es que datetime y smalldatetime solo soportan las fechas ISO con
formato YYYYMMDD por lo que prueba a lanzar la llamada con 20111111.

Por otro lado, para la sintaxis de sp_executesql está bastante bien
explicada en http://msdn2.microsoft.com/es-es/li...88001.aspx

Por último y aunque esto no tiene que ver con tu pregunta, decirte que el
beneficio de sp_executesql lo tienes si realizas generación de sql desde tu
aplicación cliente y no tienes posibilidad de plantear una arquitectura
basada en procedimientos almacenados (lo deseable). En este caso concreto que
supongo que es un ejemplo estas desaprovechando el beneficio de la
compilación de un procedimiento almacenado.

Lo suyo seria que hicieras:
create PROCEDURE [dbo].[sp_InsertarLineaParte_fecha]
@fecha smalldatetime
AS
BEGIN

UPDATE tbl_partes SET
Fecha5 = @fecha
WHERE NumParte = 12
END

Enrique Catala Bañuls
Solid Quality Mentors



"Dani" wrote:

> Hola a todos, estoy intentando lo siguiente pero no me funciona, de todas
> maneras no encuentro informmacion sobre sp_executesql o por lo menos clara y
> facil.
>
> Alguien me puede dar un link para mirar sp_executesql.
>
> Os madno mi código para que se entienda que quiero hacer.
>
> gracias a todo el mundo.
>
> USE [Partes]
> GO
> /****** Objeto: StoredProcedure [dbo].[sp_InsertarLineaParte_fecha]
> Fecha de la secuencia de comandos: 04/28/2008 10:36:52 ******/
> SET ANSI_NULLS ON
> GO
> SET QUOTED_IDENTIFIER ON
> GO
>
> ALTER PROCEDURE [dbo].[sp_InsertarLineaParte_fecha]
> @fecha smalldatetime
> AS
> BEGIN
>
> DECLARE @SQLString AS varchar(500);
> DECLARE @ParmDefinition NVARCHAR(500);
> SET @SQLString = N'UPDATE tbl_partes SET ' +
> ' Fecha5 = @fechaXX ' +
> ' WHERE NumParte = 12'
>
> SET @ParmDefinition = '@fechaXX smalldatetime';
>
> EXECUTE sp_executesql @SQLString, @ParmDefinition,
> @fechaXX = @fecha;
> END
>
>
> sp_insertarlineaparte_fecha '11/11/2011'
>
>
>
>
Respuesta Responder a este mensaje
#3 Dani
28/04/2008 - 20:28 | Informe spam
Hola Enrique te pongo el error que me da.

El procedimiento espera un parámetro '@statement' de tipo
'ntext/nchar/nvarchar'.

si puedes orientarme un poco te lo agradezco.

gracias

Dani

"Enrique Catala Bañuls" wrote:

Hola dani, dos cosas:
La primera es que datetime y smalldatetime solo soportan las fechas ISO con
formato YYYYMMDD por lo que prueba a lanzar la llamada con 20111111.

Por otro lado, para la sintaxis de sp_executesql está bastante bien
explicada en http://msdn2.microsoft.com/es-es/li...88001.aspx

Por último y aunque esto no tiene que ver con tu pregunta, decirte que el
beneficio de sp_executesql lo tienes si realizas generación de sql desde tu
aplicación cliente y no tienes posibilidad de plantear una arquitectura
basada en procedimientos almacenados (lo deseable). En este caso concreto que
supongo que es un ejemplo estas desaprovechando el beneficio de la
compilación de un procedimiento almacenado.

Lo suyo seria que hicieras:
create PROCEDURE [dbo].[sp_InsertarLineaParte_fecha]
@fecha smalldatetime
AS
BEGIN

UPDATE tbl_partes SET
Fecha5 = @fecha
WHERE NumParte = 12
END

Enrique Catala Bañuls
Solid Quality Mentors



"Dani" wrote:

> Hola a todos, estoy intentando lo siguiente pero no me funciona, de todas
> maneras no encuentro informmacion sobre sp_executesql o por lo menos clara y
> facil.
>
> Alguien me puede dar un link para mirar sp_executesql.
>
> Os madno mi código para que se entienda que quiero hacer.
>
> gracias a todo el mundo.
>
> USE [Partes]
> GO
> /****** Objeto: StoredProcedure [dbo].[sp_InsertarLineaParte_fecha]
> Fecha de la secuencia de comandos: 04/28/2008 10:36:52 ******/
> SET ANSI_NULLS ON
> GO
> SET QUOTED_IDENTIFIER ON
> GO
>
> ALTER PROCEDURE [dbo].[sp_InsertarLineaParte_fecha]
> @fecha smalldatetime
> AS
> BEGIN
>
> DECLARE @SQLString AS varchar(500);
> DECLARE @ParmDefinition NVARCHAR(500);
> SET @SQLString = N'UPDATE tbl_partes SET ' +
> ' Fecha5 = @fechaXX ' +
> ' WHERE NumParte = 12'
>
> SET @ParmDefinition = '@fechaXX smalldatetime';
>
> EXECUTE sp_executesql @SQLString, @ParmDefinition,
> @fechaXX = @fecha;
> END
>
>
> sp_insertarlineaparte_fecha '11/11/2011'
>
>
>
>
Respuesta Responder a este mensaje
#4 Enrique Catala Bañuls
29/04/2008 - 00:16 | Informe spam
Hola, el problema lo tienes porque has declarado SQLString como varchar, no
como nvarchar. Si lo cambias te funcionará.

Pero de todas formas, no es recomendable de ninguna forma que hagas ese tipo
de código, estas desaprovechando el beneficio de los procedimientos
almacenados.

Un saludo.
Enrique Catala Bañuls
Solid Quality Mentors



"Dani" wrote:

Hola Enrique te pongo el error que me da.

El procedimiento espera un parámetro '@statement' de tipo
'ntext/nchar/nvarchar'.

si puedes orientarme un poco te lo agradezco.

gracias

Dani

"Enrique Catala Bañuls" wrote:

> Hola dani, dos cosas:
> La primera es que datetime y smalldatetime solo soportan las fechas ISO con
> formato YYYYMMDD por lo que prueba a lanzar la llamada con 20111111.
>
> Por otro lado, para la sintaxis de sp_executesql está bastante bien
> explicada en http://msdn2.microsoft.com/es-es/li...88001.aspx
>
> Por último y aunque esto no tiene que ver con tu pregunta, decirte que el
> beneficio de sp_executesql lo tienes si realizas generación de sql desde tu
> aplicación cliente y no tienes posibilidad de plantear una arquitectura
> basada en procedimientos almacenados (lo deseable). En este caso concreto que
> supongo que es un ejemplo estas desaprovechando el beneficio de la
> compilación de un procedimiento almacenado.
>
> Lo suyo seria que hicieras:
> create PROCEDURE [dbo].[sp_InsertarLineaParte_fecha]
> @fecha smalldatetime
> AS
> BEGIN
>
> UPDATE tbl_partes SET
> Fecha5 = @fecha
> WHERE NumParte = 12
> END
>
> Enrique Catala Bañuls
> Solid Quality Mentors
>
>
>
> "Dani" wrote:
>
> > Hola a todos, estoy intentando lo siguiente pero no me funciona, de todas
> > maneras no encuentro informmacion sobre sp_executesql o por lo menos clara y
> > facil.
> >
> > Alguien me puede dar un link para mirar sp_executesql.
> >
> > Os madno mi código para que se entienda que quiero hacer.
> >
> > gracias a todo el mundo.
> >
> > USE [Partes]
> > GO
> > /****** Objeto: StoredProcedure [dbo].[sp_InsertarLineaParte_fecha]
> > Fecha de la secuencia de comandos: 04/28/2008 10:36:52 ******/
> > SET ANSI_NULLS ON
> > GO
> > SET QUOTED_IDENTIFIER ON
> > GO
> >
> > ALTER PROCEDURE [dbo].[sp_InsertarLineaParte_fecha]
> > @fecha smalldatetime
> > AS
> > BEGIN
> >
> > DECLARE @SQLString AS varchar(500);
> > DECLARE @ParmDefinition NVARCHAR(500);
> > SET @SQLString = N'UPDATE tbl_partes SET ' +
> > ' Fecha5 = @fechaXX ' +
> > ' WHERE NumParte = 12'
> >
> > SET @ParmDefinition = '@fechaXX smalldatetime';
> >
> > EXECUTE sp_executesql @SQLString, @ParmDefinition,
> > @fechaXX = @fecha;
> > END
> >
> >
> > sp_insertarlineaparte_fecha '11/11/2011'
> >
> >
> >
> >
Respuesta Responder a este mensaje
#5 Alejandro Mesa
29/04/2008 - 14:50 | Informe spam
Hola Enrique,

A mi tambien me gusta trabajar con procedimientos almacenados,
principalmente por tener centralizado el codigo y ademas de usarlos como
interface entre la db y s usuarios. Ahora, tambien se generan planes
compilados para consultas adhoc y preparadas. Eso lo podemos ver si usamos la
vista de compatibilidad (SS 2005) sys.syscacheobjects, la cual es una tabla
virtual en SS 2000 o usando las nuevas vistas de administracion DMVs y DMFs
de SS 2005, como son:

- sys.dm_exec_cached_plans
- sys.dm_exec_plan_attributes
- sys.dm_exec_sql_text


Ejemplo:

Ojo, No ejecutar este ejemplo en un servidor en producion.

USE [Northwind]
GO

DBCC freeproccache
GO

DECLARE @i INT
DECLARE @sql NVARCHAR(4000)

SET @i = 10250

SET @sql = N'SELECT o.[OrderID], o.[OrderDate], o.[CustomerID] FROM
[dbo].[Orders] AS o WHERE o.[OrderID] = @i'

EXEC sp_executesql @sql, N'@i INT', @i
GO

SELECT *
FROM sys.syscacheobjects
WHERE objtype IN ('Prepared', 'Adhoc') AND cacheobjtype = 'Compiled Plan'
GO


Al menos objtendras dos filas, una para la la sentencia enviada atraves de
sp_executesql (Prepared) y la otra para la consulta Adhoc que busca en
sys.syscacheobjects.


AMB

"Enrique Catala Bañuls" wrote:

Hola, el problema lo tienes porque has declarado SQLString como varchar, no
como nvarchar. Si lo cambias te funcionará.

Pero de todas formas, no es recomendable de ninguna forma que hagas ese tipo
de código, estas desaprovechando el beneficio de los procedimientos
almacenados.

Un saludo.
Enrique Catala Bañuls
Solid Quality Mentors



"Dani" wrote:

> Hola Enrique te pongo el error que me da.
>
> El procedimiento espera un parámetro '@statement' de tipo
> 'ntext/nchar/nvarchar'.
>
> si puedes orientarme un poco te lo agradezco.
>
> gracias
>
> Dani
>
> "Enrique Catala Bañuls" wrote:
>
> > Hola dani, dos cosas:
> > La primera es que datetime y smalldatetime solo soportan las fechas ISO con
> > formato YYYYMMDD por lo que prueba a lanzar la llamada con 20111111.
> >
> > Por otro lado, para la sintaxis de sp_executesql está bastante bien
> > explicada en http://msdn2.microsoft.com/es-es/li...88001.aspx
> >
> > Por último y aunque esto no tiene que ver con tu pregunta, decirte que el
> > beneficio de sp_executesql lo tienes si realizas generación de sql desde tu
> > aplicación cliente y no tienes posibilidad de plantear una arquitectura
> > basada en procedimientos almacenados (lo deseable). En este caso concreto que
> > supongo que es un ejemplo estas desaprovechando el beneficio de la
> > compilación de un procedimiento almacenado.
> >
> > Lo suyo seria que hicieras:
> > create PROCEDURE [dbo].[sp_InsertarLineaParte_fecha]
> > @fecha smalldatetime
> > AS
> > BEGIN
> >
> > UPDATE tbl_partes SET
> > Fecha5 = @fecha
> > WHERE NumParte = 12
> > END
> >
> > Enrique Catala Bañuls
> > Solid Quality Mentors
> >
> >
> >
> > "Dani" wrote:
> >
> > > Hola a todos, estoy intentando lo siguiente pero no me funciona, de todas
> > > maneras no encuentro informmacion sobre sp_executesql o por lo menos clara y
> > > facil.
> > >
> > > Alguien me puede dar un link para mirar sp_executesql.
> > >
> > > Os madno mi código para que se entienda que quiero hacer.
> > >
> > > gracias a todo el mundo.
> > >
> > > USE [Partes]
> > > GO
> > > /****** Objeto: StoredProcedure [dbo].[sp_InsertarLineaParte_fecha]
> > > Fecha de la secuencia de comandos: 04/28/2008 10:36:52 ******/
> > > SET ANSI_NULLS ON
> > > GO
> > > SET QUOTED_IDENTIFIER ON
> > > GO
> > >
> > > ALTER PROCEDURE [dbo].[sp_InsertarLineaParte_fecha]
> > > @fecha smalldatetime
> > > AS
> > > BEGIN
> > >
> > > DECLARE @SQLString AS varchar(500);
> > > DECLARE @ParmDefinition NVARCHAR(500);
> > > SET @SQLString = N'UPDATE tbl_partes SET ' +
> > > ' Fecha5 = @fechaXX ' +
> > > ' WHERE NumParte = 12'
> > >
> > > SET @ParmDefinition = '@fechaXX smalldatetime';
> > >
> > > EXECUTE sp_executesql @SQLString, @ParmDefinition,
> > > @fechaXX = @fecha;
> > > END
> > >
> > >
> > > sp_insertarlineaparte_fecha '11/11/2011'
> > >
> > >
> > >
> > >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida