PDA

View Full Version : ایجاد view



msaeedeh
چهارشنبه 20 فروردین 1393, 09:35 صبح
من می خواستم برای همه جدول هایی که در پایگاه دارم view ساده درست کنم ولی نه به صورت دستی برای تک تک آنها ، چون حدود 80 تا جدول است . راهی وجود داره که با یه کد چند خطی T_sqlبشه این کارو کرد ?

fakhravari
جمعه 22 فروردین 1393, 23:38 عصر
view
چه کاربردی برات داره که این همه میخواهی ایجاد کنی!

msaeedeh
شنبه 23 فروردین 1393, 09:34 صبح
view
چه کاربردی برات داره که این همه میخواهی ایجاد کنی!

تازه دارم T_sql یاد میگیرم ، پروژه دارم . با sp_executesql باید بنویسم

Mojtaba.Shateri
شنبه 23 فروردین 1393, 10:16 صبح
این یه نمونه :
DECLARE @TableName sysname
DECLARE @ColumnCount INT
DECLARE @ColumnID INT
DECLARE @SelectColumn NVARCHAR(500)
DECLARE @sql NVARCHAR(max) = ''

DECLARE QUERYINFO CURSOR FOR
SELECT
t.name AS TableName,
ccount.ColumnCount,
c.column_id AS ColumnID,
CASE WHEN c.column_id <> ccount.ColumnCount
THEN c.name + ', '
ELSE c.name
END AS SelectColumn
FROM sys.tables t
INNER JOIN sys.columns c ON t.object_id=c.object_id
INNER JOIN (
SELECT object_id,COUNT(*) AS ColumnCount
FROM sys.columns
GROUP BY object_id
) ccount ON t.object_id = ccount.object_id
ORDER BY t.Name,c.column_id

OPEN QUERYINFO
FETCH NEXT FROM QUERYINFO INTO @TableName,@ColumnCount,@ColumnID,@SelectColumn
WHILE @@FETCH_STATUS = 0
BEGIN
IF @ColumnID = 1
BEGIN
SET @sql = 'CREATE VIEW v_' + @TableName + ' AS SELECT ' + @SelectColumn
END
ELSE
BEGIN
SET @sql = @sql + @SelectColumn
END

IF @ColumnID = @ColumnCount
BEGIN
SET @sql = @sql + ' FROM ' + @TableName
EXEC sys.sp_executesql @sql
SET @sql = ''
END

FETCH NEXT FROM QUERYINFO INTO @TableName,@ColumnCount,@ColumnID,@SelectColumn
END

CLOSE QUERYINFO
DEALLOCATE QUERYINFO

یوسف زالی
یک شنبه 24 فروردین 1393, 00:07 صبح
اوه اوه چقدر سختش کردید:


exec sp_MSforeachtable
'
declare @X varchar(max)
select @X = ''create view VW_'' + TABLE_NAME + '' as select * from '' + TABLE_NAME
from INFORMATION_SCHEMA.TABLES
where ''['' + TABLE_SCHEMA + ''].['' + TABLE_NAME + '']'' = ''?''
exec(@X)
'


با کمی تغییرات همونی می شه که لازم دارید.
تا جایی که می شه سعی کنید کرسر رو فراموش کنید. خیلی راههای ساده تری هست برای رسیدن به کوئری داینامیک بدون کرسر.

msaeedeh
یک شنبه 24 فروردین 1393, 08:31 صبح
من تازه کارم ، لطف می کنید یه کم توضیح بدید

یوسف زالی
یک شنبه 24 فروردین 1393, 10:07 صبح
باید جزییات دستورات رو خودتون در Help ببینید اما در حالت کلی:
exec و sp_executesql برای اجرای یک کوئری به کار می روند.
sp_MSforeachtable بصورت حلقه روی تک تک اسامی جداولتون یک رشته رو اجرا می کنه، ? هم یک نگهدارنده مکان برای نام جدول هست
INFORMATION_SCHEMA.TABLES لیست اطلاعات کلی جداول شما رو داره