![]() |
|
| |||||||
|
| | Seçenekler |
|
#1
| |||
| | |||
Veri tabanındaki belirli bir veri tipini otomatik değiştirmeEn az 100 tabloluk bir veri tabanınız olsun, ve bu veri tabanında her tabloda Degistiren_Kullanici_Kodu adında bir alanınız olsun. Ve o alanın veritipi varchar uzunluğu 10 olsun. Sizden şunu istediler: - X veri tabanındaki Kullanicilar tablosundaki Kullanici_Kodu alaninin uzunlugunu 20 karakter yap ve tüm tablolardaki Degistiren_Kullanici_Kodu'nun uzunluğunu da buna göre 20 yap. 100 tablo her tabloyu açıp değişikliği yapıp kaydetmek 30 sn sürse (100*30)/60 = 50 dakika! Molaları ve ufak tefek hataları da sayarsak olur sana yarım mesai )Bunun yerine aşağıdaki kodu kullanarak işi bir kaç saniyede bitirebilirsiniz: CREATE PROCEDURE P_CHANGE_DATA_TYPE --@lik @TableName varchar(100)=null, --Tablo adı tekbir tablo değiştirillecekse @FieldName varchar(100)=null, --Alan adı (LIKE yani % kullanılabilir) @CurrDataType varchar(100), --Şuanki veri tipi @CurrDataTypeLen int=null, --Eğer varchar,char,nvarchar v.b. ise şuanki uzunluğu yoksa NULL @CurrDataTypePrec int=null, --NUMERIC veri tipi gibi uzunluğu sabit olmayan bir numerik veri tipi ise --genişliği yoksa NULL @CurrDataTypeScale int=null, --NUMERIC veri tipi gibi virgülden sonrası sabit olmayan veri tipi ise --ondalık genişlik yoksa NULL @NewDataType varchar(100), --Yeni veri tipi @NeDataTypeLen int=null, --Eğer varchar,char,nvarchar v.b. ise yeni uzunluğu yoksa NULL @NewDataTypePrec int=null, --NUMERIC veri tipi gibi uzunluğu sabit olmayan bir numerik veri tipi ise --genişliği yoksa NULL @NewDataTypeScale int=null --NUMERIC veri tipi gibi virgülden sonrası sabit olmayan veri tipi ise --ondalık genişlik yoksa NULL AS /* Verilen tipteki tüm kolonların veri tiplerini değiştirir @lik 07/05/2003*/ /*Parametrelere göre alanların veri tiplerini değiştiri @lik 07/11/2007*/ DECLARE @ColumnName VARCHAR(100), @DataType VARCHAR(100) BEGIN TRANSACTION DECLARE Tables CURSOR FOR SELECT o.name TableName, c.name ColumnName FROM sysobjects o, systypes t, syscolumns c WHERE c.id = o.id AND o.type = 'U' --Tablolar AND (o.name LIKE @TableName OR @TableName IS NULL) AND (c.name LIKE @FieldName OR @FieldName IS NULL) AND c.xusertype = t.xusertype AND t.name = @CurrDataType AND (c.length = @CurrDataTypeLen OR @CurrDataTypeLen IS NULL) AND (c.xprec = @CurrDataTypePrec OR @CurrDataTypePrec IS NULL) AND (c.xscale = @CurrDataTypeScale OR @CurrDataTypeScale IS NULL) ORDER BY o.name OPEN Tables FETCH NEXT FROM Tables INTO @TableName, @ColumnName WHILE @@FETCH_STATUS = 0 BEGIN SET @DataType = " IF NOT @NeDataTypeLen IS NULL SET @DataType = @NewDataType + '(' + CONVERT(VARCHAR(50),@NeDataTypeLen) + ')' IF NOT @NewDataTypePrec IS NULL OR @NewDataTypePrec > 0 BEGIN SET @DataType = @DataType + '(' + CONVERT(VARCHAR(50),@NewDataTypePrec ) IF NOT @NewDataTypeScale IS NULL OR @NewDataTypeScale > 0 SET @DataType = @DataType + ',' + CONVERT(VARCHAR(50),@NewDataTypeScale) SET @DataType = @DataType + ')' END -- PRINT 'ALTER TABLE ' + @TableName + ' ALTER COLUMN ' + @ColumnName + ' ' + @DataType EXEC('ALTER TABLE ' + @TableName + ' ALTER COLUMN ' + @ColumnName + ' ' + @DataType) FETCH NEXT FROM Tables INTO @TableName, @ColumnName END IF @@error != 0 ROLLBACK TRANSACTION ELSE COMMIT TRANSACTION CLOSE Tables DEALLOCATE Tables GO Yukarıda verilen örnek için kod şu şekilde olmalı: EXEC dbo.P_CHANGE_DATA_TYPE default,'%Degistiren_Kullanici_Kodu%','varchar',10 ,default,default,'varchar',20,default,default Veri tabanında tüm tablolarda alan isimleri içinde Degistiren_Kullanici_Kodu olanların veri tipi uzunlukları 20 olacaktır. Örnek2: -------------------------------------------------------------------------------- --Tek bir tabloyu değiştirmek için: EXEC dbo.P_CHANGE_DATA_TYPE 'Tablo_Adı','%Degistiren_Kullanici_Kodu%','varchar ',10,default,default,'varvarchar',20,default,defau lt Örnek3: -------------------------------------------------------------------------------- --Degistiren_Kullanici_Kodu alanı int olsun onu float yapalım EXEC dbo.P_CHANGE_DATA_TYPE 'Tablo_Adı','%Degistiren_Kullanici_Kodu%','int',de fault,default,default,'float',default,default,defa ult Görüldüğü üzere uzunluk yollamadım çünkü bu veri tiplerinin uzunlukları sabit. Örnek4: -------------------------------------------------------------------------------- --Degistiren_Kullanici_Kodu alanı float olsun onu numeric(15,3) yapalım EXEC dbo.P_CHANGE_DATA_TYPE default,'%Degistiren_Kullanici_Kodu%','float',defa ult,default,default,'numeric',default,15,3 Görüldüğü üzere yeni veri tipine uzunluk yollamadım çünkü bu veri tipi nümerik ve tam sayı ile ondalık uzunluğu var.Yani uzunluk özelliğini sadece metinsel veri tiplerinde (text hariç) kullanıyoruz. Örnek5: -------------------------------------------------------------------------------- --Degistiren_Kullanici_Kodu alanı numeric(15,3) olsun onu numeric(18,4) yapalım EXEC dbo.P_CHANGE_DATA_TYPE default,'%Degistiren_Kullanici_Kodu%','numeric',de fault,15,3,'numeric',default,18,4 |
![]() |
| Arama Etiketleri: belirli, degistirme, otomatik, tabanindaki, tipini, veri |
| Seçenekler | |
| |
Benzer Konular | ||||
| Konu | Konu Açanlar | Forum | Cevaplar | Güncel Mesajlar |
| Resme tıklayınca veri tabanındaki link alanından url nasıl açabilirim | musdi42 | ASP | 2 | 02-08-2008 06:28 |
| Veri tabanındaki belirli bir veri tipini otomatik değiştirme | cunobag | Veritabanı programcılığı | 0 | 05-06-2008 03:25 |
| Veri Yedekleme | egitimbilgisi | Asp kodları | 0 | 30-11-2007 02:39 |
| veri transferi | kadınca | Mysql | 0 | 21-11-2007 10:46 |
| PHP ve Veri TABANI | Professionel | Programlama Makaleleri | 0 | 19-11-2007 07:58 |
![]() | ![]() |