Çö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 diye SELECT @Telefonlar = @Telefonlar + ',' + MT.Telefon FROM MusteriTelefon MT WHERE MT.MusteriId=1 SELECT @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=1 SELECT @Telefonlar |
1
2
3
4
5
6
| DECLARE @Telefonlar varchar (50) SELECT @Telefonlar = COALESCE (@Telefonlar + ',' , '' ) + ISNULL (MT.Telefon, '' ) FROM MusteriTelefon MT WHERE MT.MusteriId=1 SELECT @Telefonlar |
1
2
3
4
5
6
7
8
9
10
11
12
13
| CREATE FUNCTION dbo.GetTelefon ( @MusteriId int ) RETURNS VARCHAR (50) AS BEGIN DECLARE @Telefonlar varchar (50) SELECT @Telefonlar = COALESCE (@Telefonlar + ',' , '' ) + ISNULL (MT.Telefon, '' ) FROM MusteriTelefon MT WHERE MT.MusteriId=@MusteriId RETURN @Telefonlar END |
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şse SELECT '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 MusteriTelefon FOR 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.Telefonlar FROM 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