exchanging

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

شروع موضوع توسط Helen_Farhani ‏19 سپتامبر 2007 در انجمن زبان T-SQL

  1. Helen_Farhani

    Helen_Farhani کاربر تازه وارد

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

    alireza sh مدیر بازنشسته

    تاریخ عضویت:
    ‏2 ژانویه 2006
    نوشته ها:
    2,668
    تشکر شده:
    66
    محل سکونت:
    نصف جهان
    تا جایی که بنده اطلاع دارم باید اسم همه رو بنویسین ! البته تا میتونین از * استفاده نکنین و اسم فیلدها رو بنویسین چون performance بهتری داره تا *
     
  3. CZed

    CZed کاربر تازه وارد

    تاریخ عضویت:
    ‏6 سپتامبر 2007
    نوشته ها:
    145
    تشکر شده:
    0
    محل سکونت:
    Tehran
    البته این یک راه هست، ولی احتمالا اینکه اسم همه ستونها رو بنویسی خیلی راحت تره! :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 @[email protected] + ', ' + @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 شرط یا چیزه دیگه ای اضافه کنی، اونارو) بهش پاس داد تا خود به خود همه چیز کار کنه! اگه میخوای از این کد استفاده کنی حتما خوب تستش کن، چون من اصلا تستش نکردم! ممکنه لیست ستونها رو اشتباه یا زیادی بده...
     
  4. Helen_Farhani

    Helen_Farhani کاربر تازه وارد

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

    CZed کاربر تازه وارد

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