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'
Por otro lado, para la sintaxis de sp_executesql está bastante bien
explicada en http://msdn2.microsoft.com/es-es/library/ms188001.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
-- http://blogs.solidq.com/ES/ElRinconDelDBA/default.aspx
-- http://ecatalab.blogspot.com
no obstante estoy intentando poner primero el año y tampoco me funciona, ¿no
hay que poner un separador / .
gracias.
El procedimiento espera un parámetro '@statement' de tipo
'ntext/nchar/nvarchar'.
si puedes orientarme un poco te lo agradezco.
gracias
Dani
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.
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