Ayuda con un Store

21/02/2008 - 00:40 por Juan Huachaca Gomez | Informe spam
Estimados como puedo manejar esto ??, no puedo actualizar vistas mendiante
un store ???

create procedure juanito_vista

as

if exists (select * from peru..sysobjects where id =
object_id(N'[dbo].[CATEGORIAS_COMPRADAS]') and OBJECTPROPERTY(id, N'IsView')
= 1)

drop view peru..CATEGORIAS_COMPRADAS

GO

CREATE VIEW peru..CATEGORIAS_COMPRADAS

AS

SELECT HC.idDomicilio, HC.idProduto

FROM peru..HAto_Cabecalho HC INNER JOIN

peru..HTipo_Ato HT ON HC.Tipo_Ato = HT.Tipo_Ato

WHERE (HC.Data_Compra BETWEEN '20070101' AND '20070131')

AND (HT.Considerar = 'S')--CAMBIAR LA FECHA DESDE/HASTA

GROUP BY HC.idDomicilio, HC.idProduto

GO


Salu2

Juan Huachaca Gomez
Lima - Peru
Celular: (511) 9353 - 3970

Preguntas similare

Leer las respuestas

#6 Alejandro Mesa
21/02/2008 - 17:10 | Informe spam
Para eso mejor que cree una funcion definida por el usuario que devuelve una
tabla.


AMB

"" wrote:

Me imagino q Juan quiere hacer esto para luego hacer parametrizable
las fechas q están entre el between, asi luego envía dichas fechas al
sp y este se encarga de ponerlas como fijas en la vista.


Respuesta Responder a este mensaje
#7 Juan Huachaca Gomez
21/02/2008 - 17:59 | Informe spam
Hola, Edwin que tal, si eso es lo que necesito !!!, pq si lo hago con el
esquema de tablas se demora mucho en cargarlas...

Salu2

Juan Huachaca Gomez
Lima - Peru
Celular: (511) 9353 - 3970

escribió en el mensaje
news:
Me imagino q Juan quiere hacer esto para luego hacer parametrizable
las fechas q están entre el between, asi luego envía dichas fechas al
sp y este se encarga de ponerlas como fijas en la vista.
Respuesta Responder a este mensaje
#8 Jesús López
21/02/2008 - 18:20 | Informe spam
Prueba esto Gux:

create table t (col1 int)
go

insert t values (30)
insert t values (10)
insert t values (11)
insert t values (20)
go


create proc p
as
go
create view v as select * from t where col1 > 10
go


drop view v

go

exec p

select * from v



El procedimiento almacenado p, está vacío, no tiene código ninguno. create
view se está ejecutando en otro batch, por eso el drop view v, functiona
perfectamente. exec p no crea ninguna vista.

Para crear vistas dentro de un procedimiento almacenado tienes que usar
ejecución dinámica.

Saludos:

Jesús López
www.solidq.com







"Gux (MVP)" escribió en el mensaje
news:
Qué mensaje de error tiene?

Esto funciona perfectamente:

create table t (col1 int)
go

insert t values (30)
insert t values (10)
insert t values (11)
insert t values (20)
go


create proc p
as
go
create view v as select * from t where col1 > 10
go


exec p

select * from v

col1
30
11
20

(3 row(s) affected)


Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Juan Huachaca Gomez" wrote:

Estimados como puedo manejar esto ??, no puedo actualizar vistas
mendiante
un store ???

create procedure juanito_vista

as

if exists (select * from peru..sysobjects where id >> object_id(N'[dbo].[CATEGORIAS_COMPRADAS]') and OBJECTPROPERTY(id,
N'IsView')
= 1)

drop view peru..CATEGORIAS_COMPRADAS

GO

CREATE VIEW peru..CATEGORIAS_COMPRADAS

AS

SELECT HC.idDomicilio, HC.idProduto

FROM peru..HAto_Cabecalho HC INNER JOIN

peru..HTipo_Ato HT ON HC.Tipo_Ato = HT.Tipo_Ato

WHERE (HC.Data_Compra BETWEEN '20070101' AND '20070131')

AND (HT.Considerar = 'S')--CAMBIAR LA FECHA DESDE/HASTA

GROUP BY HC.idDomicilio, HC.idProduto

GO


Salu2

Juan Huachaca Gomez
Lima - Peru
Celular: (511) 9353 - 3970



Respuesta Responder a este mensaje
#9 edwindelgadoc
22/02/2008 - 00:08 | Informe spam
Hola Juan
Asi es, yo tambien necesite realizar una vista pero con filtro para no
traerme toda la data, en mi caso esta vista se ejecutaba en otro
servidor fisicamente distante... y ya te imaginaras como demoraba el
select si no le ponia un where a la vista.
Entonces hize algo asi :

Create Procedure juanito_vista
@Inicio Char(8) ,
@Final Char(8)
As

Set Quoted_Identifier on
Set Dateformat dmy
Set nocount on

Declare @SqlCadena Varchar(8000)

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].
[CATEGORIAS_COMPRADAS]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[CATEGORIAS_COMPRADAS]

Set @SqlCadena = 'Create VIEW .dbo.CATEGORIAS_COMPRADAS
AS
SELECT HC.idDomicilio, HC.idProduto
FROM HAto_Cabecalho HC INNER JOIN
HTipo_Ato HT ON HC.Tipo_Ato = HT.Tipo_Ato
WHERE (HC.Data_Compra BETWEEN ' + char(39) + @Inicio + char(39) + '
AND ' + char(39) + @Final + char(39) + ')
AND (HT.Considerar = ''S'')
GROUP BY HC.idDomicilio, HC.idProduto'

Exec (@SqlCadena)




Y luego ejecutaba el sp asi:
Exec juanito_vista @Inicio = '20070101' , @Final = '20070131'

Y finalmente ejecutaba la vista para obtener los datos asi:
Select * From .dbo.CATEGORIAS_COMPRADAS

Quizas haya una manera mas limpia de realizar estono lo se, pero
esto fue lo q se me ocurrio y funcionó.

Saludos.
Respuesta Responder a este mensaje
#10 Gux (MVP)
22/02/2008 - 14:26 | Informe spam
Buen punto.

Mi error fue el GO luego del AS de CREATE PROC. Puse el GO porque CREATE
VIEW debe ser primera sentencia en el batch... pero el GO marca el final del
CREATE PROC :-)

Por tanto en mi código cree un sproc vacío y el CREATE VIEW funcionó, pero
en otro batch separado.

Gracias por testear el código :-)
Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Jesús López" wrote:

Prueba esto Gux:

create table t (col1 int)
go

insert t values (30)
insert t values (10)
insert t values (11)
insert t values (20)
go


create proc p
as
go
create view v as select * from t where col1 > 10
go


drop view v

go

exec p

select * from v



El procedimiento almacenado p, está vacío, no tiene código ninguno. create
view se está ejecutando en otro batch, por eso el drop view v, functiona
perfectamente. exec p no crea ninguna vista.

Para crear vistas dentro de un procedimiento almacenado tienes que usar
ejecución dinámica.

Saludos:

Jesús López
www.solidq.com







"Gux (MVP)" escribió en el mensaje
news:
> Qué mensaje de error tiene?
>
> Esto funciona perfectamente:
>
> create table t (col1 int)
> go
>
> insert t values (30)
> insert t values (10)
> insert t values (11)
> insert t values (20)
> go
>
>
> create proc p
> as
> go
> create view v as select * from t where col1 > 10
> go
>
>
> exec p
>
> select * from v
>
> col1
> 30
> 11
> 20
>
> (3 row(s) affected)
>
>
> Gustavo Larriera, Microsoft MVP
> https://mvp.support.microsoft.com/profile/gux
> Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
>
>
>
> "Juan Huachaca Gomez" wrote:
>
>> Estimados como puedo manejar esto ??, no puedo actualizar vistas
>> mendiante
>> un store ???
>>
>> create procedure juanito_vista
>>
>> as
>>
>> if exists (select * from peru..sysobjects where id > >> object_id(N'[dbo].[CATEGORIAS_COMPRADAS]') and OBJECTPROPERTY(id,
>> N'IsView')
>> = 1)
>>
>> drop view peru..CATEGORIAS_COMPRADAS
>>
>> GO
>>
>> CREATE VIEW peru..CATEGORIAS_COMPRADAS
>>
>> AS
>>
>> SELECT HC.idDomicilio, HC.idProduto
>>
>> FROM peru..HAto_Cabecalho HC INNER JOIN
>>
>> peru..HTipo_Ato HT ON HC.Tipo_Ato = HT.Tipo_Ato
>>
>> WHERE (HC.Data_Compra BETWEEN '20070101' AND '20070131')
>>
>> AND (HT.Considerar = 'S')--CAMBIAR LA FECHA DESDE/HASTA
>>
>> GROUP BY HC.idDomicilio, HC.idProduto
>>
>> GO
>>
>>
>> Salu2
>>
>> Juan Huachaca Gomez
>> Lima - Peru
>> Celular: (511) 9353 - 3970
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida