phantasm
یک شنبه 28 فروردین 1384, 12:18 عصر
ما دارای دو جدول هستیم که میخواهیم از الحاق آن ها به هم یک دیدگاه بگیریم , ولی در گرفتن این دیدگها دچار دو مشکل شدیم .
اول اینکه زمانی که اینها را با هم الحاق می کنیم به علت اینکه ما در هردو جدولمان دارای یک ستون با نام c_name هستیم در جدول حاصل ما نیز دو ستون c_name می آید که زمانی که می خواهیم دیدگاهمان را ذخیره کنیم پیغام خطا می دهد و می گوید که دارای دو ستون هم نام هستی !
دوم اینکه view ما نباید فقط در مورد دو جدول خاص کار کند بلکه با منتقل کردن آن به یکstored procedure قصد داریم تا آن را برای همه جداول و همه db ها به کار ببریم . منظور از به کار بردن این جمله این بود که در جلوی select حتما باید * بیاید من دستوری که در create view نوشتم را در پایین نوشتم تا شما اشکال کار من را پیدا کنید .
select
from dbo.borrow INNER JOIN dbo.customer
ON dbo.borrow.c_name=dbo.customer.c_name
من ساختار db خودم را هم در پایین ضمیمه کردم .
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Create_temp_table]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[Create_temp_table]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Drop_temp_table]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[Drop_temp_table]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[getviewlist]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[getviewlist]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[insert_to_view_table]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[insert_to_view_table]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[question_1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[question_1]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[removelastrow]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[removelastrow]
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE Create_temp_table
AS
Create TABLE templatting
(view_name nvarchar(40) primary key,
type nvarchar(40) ,
cond1 nvarchar (100),
cond2 nvarchar (100)
)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE Drop_temp_table AS
drop table templatting
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE getviewlist
AS
SELECT *
FROM sysobjects
WHERE (type = 'v') and name like 'A' + '%'
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE insert_to_view_table
(@V_name nvarchar(40) ,
@V_type nvarchar(40) ,
@V_cond1 nvarchar (100),
@V_cond2 nvarchar (100)
)
AS
insert into templatting (view_name,type ,cond1,cond2) values (@V_name,@V_type,@V_cond1,@V_cond2)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE question_1
AS
select c_name,c_city from customer where c_name=(select c_name from borrow where loan_no is not NULL)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE removelastrow
@vname varchar(40)
AS
if exists ( select * from templatting where view_name=@vname)
delete templatting where view_name=@vname
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
اول اینکه زمانی که اینها را با هم الحاق می کنیم به علت اینکه ما در هردو جدولمان دارای یک ستون با نام c_name هستیم در جدول حاصل ما نیز دو ستون c_name می آید که زمانی که می خواهیم دیدگاهمان را ذخیره کنیم پیغام خطا می دهد و می گوید که دارای دو ستون هم نام هستی !
دوم اینکه view ما نباید فقط در مورد دو جدول خاص کار کند بلکه با منتقل کردن آن به یکstored procedure قصد داریم تا آن را برای همه جداول و همه db ها به کار ببریم . منظور از به کار بردن این جمله این بود که در جلوی select حتما باید * بیاید من دستوری که در create view نوشتم را در پایین نوشتم تا شما اشکال کار من را پیدا کنید .
select
from dbo.borrow INNER JOIN dbo.customer
ON dbo.borrow.c_name=dbo.customer.c_name
من ساختار db خودم را هم در پایین ضمیمه کردم .
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Create_temp_table]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[Create_temp_table]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Drop_temp_table]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[Drop_temp_table]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[getviewlist]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[getviewlist]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[insert_to_view_table]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[insert_to_view_table]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[question_1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[question_1]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[removelastrow]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[removelastrow]
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE Create_temp_table
AS
Create TABLE templatting
(view_name nvarchar(40) primary key,
type nvarchar(40) ,
cond1 nvarchar (100),
cond2 nvarchar (100)
)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE Drop_temp_table AS
drop table templatting
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE getviewlist
AS
SELECT *
FROM sysobjects
WHERE (type = 'v') and name like 'A' + '%'
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE insert_to_view_table
(@V_name nvarchar(40) ,
@V_type nvarchar(40) ,
@V_cond1 nvarchar (100),
@V_cond2 nvarchar (100)
)
AS
insert into templatting (view_name,type ,cond1,cond2) values (@V_name,@V_type,@V_cond1,@V_cond2)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE question_1
AS
select c_name,c_city from customer where c_name=(select c_name from borrow where loan_no is not NULL)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE removelastrow
@vname varchar(40)
AS
if exists ( select * from templatting where view_name=@vname)
delete templatting where view_name=@vname
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO