Çözümü
Net use * /del
Net use * /del
-- Declare the text we want to search for
DECLARE @Text nvarchar(4000);
SET @Text = 'TBL_ABC';
-- Get the schema name, table name, and table type for:
-- Table names
SELECT
TABLE_SCHEMA AS 'Object Schema'
,TABLE_NAME AS 'Object Name'
,TABLE_TYPE AS 'Object Type'
,'Table Name' AS 'TEXT Location'
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%'+@Text+'%'
UNION
--Column names
SELECT
TABLE_SCHEMA AS 'Object Schema'
,COLUMN_NAME AS 'Object Name'
,'COLUMN' AS 'Object Type'
,'Column Name' AS 'TEXT Location'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%'+@Text+'%'
UNION
-- Function or procedure bodies
SELECT
SPECIFIC_SCHEMA AS 'Object Schema'
,ROUTINE_NAME AS 'Object Name'
,ROUTINE_TYPE AS 'Object Type'
,ROUTINE_DEFINITION AS 'TEXT Location'
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%'+@Text+'%'
AND (ROUTINE_TYPE = 'function' OR ROUTINE_TYPE = 'procedure');
DECLARE @Search varchar(255)
SET @Search='TBL_ABC'
SELECT DISTINCT
o.name AS Object_Name,o.type_desc
FROM sys.sql_modules m
INNER JOIN sys.objects o ON m.object_id=o.object_id
WHERE m.definition Like '%'+@Search+'%'
ORDER BY 2,1
SELECT DISTINCT OBJECT_NAME(id) FROM syscomments WHERE [text] LIKE '%User%'
1
2
3
4
5
6
7
| DECLARE @Telefonlar varchar(50)SET @Telefonlar=''--Sonuç NULL olmasın diyeSELECT @Telefonlar = @Telefonlar + ','+ MT.TelefonFROM MusteriTelefon MT WHERE MT.MusteriId=1SELECT @Telefonlar |
,(0212)111 ,(0533)111 Bu ifade de @Telefonlar değişkenin ilk değeri NULL olduğu öncelikle boş değer vermek zorundayız. Çünkü T-SQL’de ‘A’+NULL ifadesi gibi NULL ile işleme giren ifadenin sonucu NULL olur. Aynı şekilde MusteriTelefon tablosunda NULL kayıt olsaydı sonuç yine NULL olacaktı. Bunları çözmek için ISNULL() metodu kullanılır. İki parametre alan bu metod, ilk değer NULL olduğu zaman ikinci parametredeki değeri döndürür.
1
2
3
4
5
6
7
| DECLARE @Telefonlar varchar(50)SET @Telefonlar=''SELECT @Telefonlar = @Telefonlar + ISNULL(','+ MT.Telefon,'')FROM MusteriTelefon MT WHERE MT.MusteriId=1SELECT @Telefonlar |
1
2
3
4
5
6
| DECLARE @Telefonlar varchar(50)SELECT @Telefonlar = COALESCE(@Telefonlar + ',', '') + ISNULL(MT.Telefon,'')FROM MusteriTelefon MT WHERE MT.MusteriId=1SELECT @Telefonlar |
1
2
3
4
5
6
7
8
9
10
11
12
13
| CREATE FUNCTION dbo.GetTelefon( @MusteriId int)RETURNS VARCHAR(50)ASBEGIN DECLARE @Telefonlar varchar(50) SELECT @Telefonlar = COALESCE(@Telefonlar + ',', '') + ISNULL(MT.Telefon,'') FROM MusteriTelefon MT WHERE MT.MusteriId=@MusteriId RETURN @TelefonlarEND |
1
| SELECT AdSoyad, dbo.GetTelefon(MusteriId) FROM Musteri |
1
2
3
4
5
6
7
8
9
10
| --FOR XML PATH, parametresi kullanıldığı zaman node adı olarak "row" yazar.--Herhangi bir kolon adı belirtilmemişseSELECT 'C#' FOR XML PATH--Eğer kolon adı olarak XML PATH'in özel ifadelerinden "data()" girilirse herhangi bir node adı oluşturulmaz sadece kolondaki veri gösterilir.SELECT KursAd "data()" FROM Kurs FOR XML PATH--Şimdi örneğimize geri dönelim. Telefon kayıtlarını yan yana yazarken kolon adı olarak boşluğu girmesi için FOR XML PATH(") ifadesini ayrıca "row" veya kolon adını node ismi kullanmaması sadece kolon verisini göstermesi için kolon adı olarak "data()" ifadesini kullancağız.SELECT Telefon [data()] FROM MusteriTelefonFOR XML PATH('') |
(0212)111 (0533)111 (0216)111 (0542)111 Çıkan bu sonuçtaki boşluk ifadeleri virgülle replace edelim.
1
2
3
4
5
6
7
| SELECT MusteriId,REPLACE(( SELECT RTRIM(Telefon) [data()] FROM MusteriTelefon FOR XML PATH('')),' ',',')FROM MusteriTelefon |
1 (0212)111,(0533)111,(0216)111,(0542)111
1 (0212)111,(0533)111,(0216)111,(0542)111
1 (0212)111,(0533)111,(0216)111,(0542)111
2 (0212)111,(0533)111,(0216)111,(0542)111
2 (0212)111,(0533)111,(0216)111,(0542)111 örnekte Telefonların sonunda boşluk bırakmaması için [data()] yerine [text()] kullanılabilir.
1
2
3
4
5
6
7
| SELECT M.MusteriId,M.AdSoyad,T.TelefonlarFROM Musteri M CROSS APPLY( SELECT Telefon+',' AS [text()] FROM MusteriTelefon MT WHERE MT.MusteriId=M.MusteriId FOR XML PATH('')) T(Telefonlar)--Kolon Adı |
1 Sencer BELGE (0212)111 ,(0533)111 ,
2 Mehmet BELGE (0216)111 ,(0542)111 ,
3 Ayşe Güler NULL