برگزیده های پرشین تولز

مستثنی ساختن یک فیلد در SELECT

Helen_Farhani

کاربر تازه وارد
تاریخ عضویت
30 مارس 2007
نوشته‌ها
89
لایک‌ها
0
من یک جدول دارم با 20 فیلد. میخوام همه اونها select بشن، بجز یکی از اونها. حالا چکار کنم؟ نمیخوام اسم تک تک فیلدها را در query بنویسم. میخوام از * استفاده کنم و فقط بگم که فیلد name انتخاب نشه.
 

alireza sh

مدیر بازنشسته
تاریخ عضویت
2 ژانویه 2006
نوشته‌ها
2,775
لایک‌ها
70
سن
40
محل سکونت
نصف جهان
تا جایی که بنده اطلاع دارم باید اسم همه رو بنویسین ! البته تا میتونین از * استفاده نکنین و اسم فیلدها رو بنویسین چون performance بهتری داره تا *
 

CZed

کاربر تازه وارد
تاریخ عضویت
6 سپتامبر 2007
نوشته‌ها
145
لایک‌ها
0
محل سکونت
Tehran
من یک جدول دارم با 20 فیلد. میخوام همه اونها select بشن، بجز یکی از اونها. حالا چکار کنم؟ نمیخوام اسم تک تک فیلدها را در query بنویسم. میخوام از * استفاده کنم و فقط بگم که فیلد name انتخاب نشه.

البته این یک راه هست، ولی احتمالا اینکه اسم همه ستونها رو بنویسی خیلی راحت تره! :blush:
میشه از query زیر استفاده کرد (باید اسم جدول و اسم ستون رو عوض کنی، فرض کردم اسم جدول Books و اسم ستونی که نمیخوامش BookName هست):
کد:
DECLARE @tableName VARCHAR(128)
DECLARE @hideColName VARCHAR(128)

SET @tableName = 'Books'
SET @hideColName = 'BookName'

DECLARE testCursor CURSOR FOR
	SELECT syscolumns.name
	FROM
		syscolumns LEFT JOIN sysobjects ON syscolumns.id = sysobjects.id
	WHERE
		sysobjects.name = @tableName
		AND syscolumns.name != @hideColName

DECLARE @colName VARCHAR(128)
DECLARE @query VARCHAR(512)
SET @query = ''

OPEN testCursor

FETCH NEXT FROM testCursor 
INTO @colName

WHILE @@FETCH_STATUS = 0
BEGIN
	IF @query != ''
		SELECT @query=@query + ', ' + @colName
	ELSE
		SELECT @query = @colName
	FETCH NEXT FROM testCursor 
	INTO @colName
END


EXEC ('SELECT ' + @query + ' FROM ' + @tableName)

CLOSE testCursor
DEALLOCATE testCursor

اگه جدول ها رو دستکاری نکنی (منظور ستونهاست) میشه این query رو عوض کرد تا به جای خروجی، خود query رو بده تا به جای این کد از query تولید شده استفاده کرد. حتی میشه این کد رو تبدیل به یک Stored Procedure کرد و اسم جدول و ستون (و اگه مخوای به query شرط یا چیزه دیگه ای اضافه کنی، اونارو) بهش پاس داد تا خود به خود همه چیز کار کنه! اگه میخوای از این کد استفاده کنی حتما خوب تستش کن، چون من اصلا تستش نکردم! ممکنه لیست ستونها رو اشتباه یا زیادی بده...
 

Helen_Farhani

کاربر تازه وارد
تاریخ عضویت
30 مارس 2007
نوشته‌ها
89
لایک‌ها
0
ممنون از اینکه وقت گذاشتید. اما سوادم قد نمیده :blush:
 

CZed

کاربر تازه وارد
تاریخ عضویت
6 سپتامبر 2007
نوشته‌ها
145
لایک‌ها
0
محل سکونت
Tehran
ممنون از اینکه وقت گذاشتید. اما سوادم قد نمیده :blush:

تنها کاری که لازمه بکنید اینه که توی خط سوم و چهارم اسم جدول و ستونی که نمیخواید در خروجی بیاد رو بنویسین (به جای مقادیری که من گذاشتم). اگه میخواین شرطی هم اضافه بکنین به آخر
کد:
EXEC ('SELECT ' + @query + ' FROM ' + @tableName)
اضافه کنین، مثلا
کد:
EXEC ('SELECT ' + @query + ' FROM ' + @tableName + 'WHERE BookID > 2')
 
بالا