ms sql procedure yazma

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

ms sql procedure yazma

Mesaj gönderen softdestek »

Her hangi bir tablonun tüm alanların ;alan isimleerini ve değerlerini aşağıdaki tabloya ekleyen bir procedure nasıl yazabiliriz.

exec FieldveValueYaz("Yazıalacak Table") şeklinde çalıştıracağız..tüm alanları ncar tipi değişkene çevirip değerleri ile beraber tablo1 içerisine yazacak

CREATE TABLE [dbo].[TABLO1](
[Fieldname] [nchar](50) NULL,
[FieldValue] [nchar](300) NULL
) ON [PRIMARY]

Çıktısı şu şekilde olacak

[Fieldname] [FieldValue]
name VEDAT
surname PALA
city TOKAT
counrty TÜRKİYE
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: ms sql procedure yazma

Mesaj gönderen mkysoft »

Dinamik SQL oluşturarak bu işlemi aşağıdaki gibi yapabilirsiniz.

Kod: Tümünü seç

declare @TableName varchar(50) = 'Yazılacak Table';

declare @Columns varchar(4000) = '';
declare @InsertValues varchar(4000) = '';
declare @ColumnsVar varchar(4000) = '';
declare @SQL varchar(max);

SELECT @Columns = @Columns + '[' + COLUMN_NAME + ']'  from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
SELECT @InsertValues = @InsertValues + '(''' + COLUMN_NAME + ''',@' + COLUMN_NAME + '),' from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName

SET @ColumnsVar = REPLACE(REPLACE(@Columns,'[','@'),']',',');
SET @ColumnsVar = LEFT(@ColumnsVar, LEN(@ColumnsVar)-1);

SET @InsertValues = LEFT(@InsertValues, LEN(@InsertValues)-1);

SET @SQL = @Columns;
SET @SQL = REPLACE(@SQL,'[','DECLARE @');
SET @SQL = REPLACE(@SQL,']',' nvarchar(300);');

SET @SQL = @SQL + 'DECLARE RowCursor CURSOR FOR ';
SET @SQL = @SQL + 'SELECT * FROM ' + @TableName + ';';

SET @SQL = @SQL + 'OPEN RowCursor ';   
SET @SQL = @SQL + 'FETCH NEXT FROM RowCursor INTO ' + @ColumnsVar + '; ';
SET @SQL = @SQL + 'WHILE @@FETCH_STATUS = 0 '  ;
SET @SQL = @SQL + 'BEGIN ';  

SET @SQL = @SQL + 'INSERT INTO TABLO1 Values ' + @InsertValues + ';';

SET @SQL = @SQL + 'FETCH NEXT FROM RowCursor INTO ' + @ColumnsVar + '; ';
SET @SQL = @SQL + 'END ';   

SET @SQL = @SQL + 'CLOSE RowCursor ';   
SET @SQL = @SQL + 'DEALLOCATE RowCursor ';

exec(@SQL)
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: ms sql procedure yazma

Mesaj gönderen softdestek »

Şu soruma da bakabilir misiniz?
Teşekkür ederim.

XML verilerden faklı olanları listeleme
viewtopic.php?f=27&t=34501
Cevapla