Tags: , , , | Categories: Script, Tip, Veritabanı Posted by okutbay on 22.04.2011 19:53 | Yorumlar (0)

SQL Serverda text deger içeren bir kolonda like ile sorgulama yapmak istediğinizde arama kriteriniz sorgularda özel anlamı olan karakterler içeriyorsa [] içinde kullanabilirsiniz

Örneğin "_" içere arama kriterlerinde [] içinde yazarsanız sorgunu o kolonda içinde "_" geçen kayıtları döndürecektir... 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Categories: Veritabanı Posted by okutbay on 28.01.2010 10:32 | Yorumlar (0)

All of the web applications that i am responsible to maintain have lots of stored procedures. And to many of them builds a SQL string and executes at the end of the procedure. Previous programmers wrote these SPs in that way because they don’t know how to handle comma separated ID values. For these cases a small table valued split function comes to help.

CREATE FUNCTION [dbo].[Split]
(
  @delimited nvarchar(max),
  @delimiter nvarchar(100)
) RETURNS @t TABLE
(
  val nvarchar(max)
)
AS
BEGIN
  declare @xml xml
  set @xml = N'<root><r>' + replace(@delimited,@delimiter,'</r><r>') + '</r></root>'

  insert into @t(val)
  select
    r.value('.','varchar(5)') as item
  from @xml.nodes('//root/r') as records(r)

  RETURN
END

You can use this function to split array of ID with IN statement.

SELECT * FROM dbo.Split(N'a,b,c,d,e', ',')
SELECT * FROM dbo.Split('1,3,6,77,34,22', ',')
select * from Members where id in (SELECT Val as Id FROM dbo.Split('2707,2708', ','))

Happy coding…

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , | Categories: Veritabanı Posted by okutbay on 19.11.2009 09:33 | Yorumlar (0)

It's always hard to make modifications to code or database design especially if you don't know anything about the business process.

In sql server 2005 (or 2008) you can use sp_depends stored procedure to obtain dependency between the objects such as table, view or stored procedure.

For example just run 'sp_depends Users' script to determine which views or storep porcedures are using this table.

If you use this stored procedure with views or stored procedures it can show you the objects used in it and  objects uses it.

 

More Information: sp_depends (Transact-SQL)

 

Happy codding...

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , | Categories: Veritabanı Posted by okutbay on 28.10.2009 16:44 | Yorumlar (0)

You can use T-Sql's COALESCE function to combine your data into a single string. Here is a simple sample: 

DECLARE @str VARCHAR(100)

SELECT @str = COALESCE(@str + '|', '') + Firstname

FROM Members with(nolock)

Print @str

 

Result

Ilbay|Talha|Roberte|Theıoden|Cihan|Sagolee|Kazım|Mehmet|Recep|Alp|Haci|Ömer

 

Happy coding...

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , | Categories: Security, Veritabanı Posted by okutbay on 25.09.2009 10:39 | Yorumlar (0)

I was gettin this error  when i try to execute a stored procedure from linked server.

Executed as user: XXX\yyy. The OLE DB provider "SQLNCLI"
for linked server "LSQL02" reported an error.
Authentication failed. [SQLSTATE 42000] (Error 7399)  Cannot initialize the data source object of OLE DB provider "SQLNCLI" for linked server "LSQL02". [SQLSTATE 42000] (Error 7303)  OLE DB provider "SQLNCLI" for linked server "LSQL02" returned message "Invalid authorization specification". [SQLSTATE 01000] (Error 7412).  The step failed.

To solve you can map Servers local user to remote servers user with executing 'sp_addlinkedsrvlogin'

EXEC sp_addlinkedsrvlogin @rmtsrvname = 'linkedservername'

      , @useself = 'FALSE'

      , @locallogin = 'localuser'

      , @rmtuser = 'remoteuser'

      , @rmtpassword = 'remoteuserpassword'

To remove user mapping.

 

EXEC sp_droplinkedsrvlogin @rmtsrvname = 'linkedservername'

      ,@locallogin = 'localuser'

 

References

Security for Linked Servers
http://msdn.microsoft.com/en-us/library/ms175537.aspx

sp_addlinkedsrvlogin (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms189811.aspx

sp_droplinkedsrvlogin (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms186218.aspx

 

 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: | Categories: SSS (FAQ), Tip, Veritabanı Posted by okutbay on 09.09.2009 12:24 | Yorumlar (1)

You can switch the bit field's value with single update statement by using exclusive or operator.

UPDATE AdminUsers

SET IsActive = IsActive ^ 1

WHERE Id = 42

Happy codding...

Referance: ^ (Bitwise Exclusive OR) (Transact-SQL)

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , | Categories: Tanıtım Posted by okutbay on 10.08.2009 11:43 | Yorumlar (0)

You can query your database with modern query language LINQ. I think SQL Server Management Studio need this functionalty built-in.

Tool is free for now.

Yo can download from this link: http://www.linqpad.net/

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , | Categories: Veritabanı Posted by okutbay on 26.05.2009 10:43 | Yorumlar (1)

Sql serverda collation kolon seviyesinde ayarlanabilir. Farklı collation ayarlarına sahip tablolar üzerinde sorgu yaparken aşağıdaki hata ile karşılaşırsınız.

"Cannot resolve collation conflict for column X in SELECT statement."

Bu sorunu basitçe aşmak için sorunu yaratan kolon (hata mesajında X sıra numarası ile bildirilen kolon) için "COLLATE DATABASE_DEFAULT" kullanmaktır

[KolonAdi] COLLATE DATABASE_DEFAULT

DATABASE_DEFAULT yerine açık olarak istediğiniz collation adını da yazabilirsiniz.

Ör:  SQL_Latin1_General_CP1254_CI_AS, Turkish_CI_AS

İlave: Bir tablodaki kolonun collation ayarini degistirmek icin sunu yazabilirsiniz

ALTER TABLE dbo.Product
ALTER COLUMN [Description]
varchar(max)
COLLATE Latin1_General_CI_AS
NOT NULL

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , | Categories: Hata, Veritabanı Posted by okutbay on 11.05.2007 20:50 | Yorumlar (0)

Projesini yürütmekte olduğum müşterimiz ÇEVKO da yeni bir güne neşe ile başlamış görev listemdeki görevleri birer birer Packman hesabı yiyip bitiriyordum...

Geliştimekde oldugum bir rapor için bir sorgu yazmak icap etti. MySQL için geliştirilmiş ücretsiz aracımızı (Sqlyog) açmak suretiyle işe başladım. 5-10 dakika geçmeden sorgu bitmiş ve doğru olarak çalışıyordu. Derin bir oh çekerek, "oldu olacak bunu bir stored procedure yapayim!" dedim. Demez olaydım. Gerekli parametre tanımlarını yapıp sorguyu değiştirdikten sonra stored procedure ü oluşturmak için F5 tuşuna her bastığımda aşağıdaki hatayı alıyordum.

Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT ' at line 7 (0 ms taken)

Oysa hatayı belirtildiği yerde hiç bir hata yoktu... Çıldırmamak işten değildi... Aradım, taradım... Forumları okudum... Bazı yerlerde bunun bir bug olduğu yazıyordu. "Aha şimdi zıçtık!" diye düşündüm... Diğer yandan da aklım almıyordu. Tamam uzmanı değildim ama bu yazdığım ilk sorgu ya da ilk stored procedure değildi ki! Üstelik sorgu olarak düzgün çalışıyordu.

Yaklaşık iki saat debelendikten sonra. Sorgunun sonunda ";" koymadığımı fark ettim.

Veritabanı uzmanları için böyle bir hata yapılamaz bir hata olabilir. Ama iyi bilen bir insan bile bu ufak detayı atlayabilir. Burada iş verilen hata mesajında aslında. Böyle genel bir hata vereceğine "Kardeş noktalı virgül koymayı atladın!" dese kıyamet mi kopar! Ama ne yapalım "Ucuz etin yahnisi sert olur" diye boşuna söylememiş Atalarımız...

Klavyeleriniz şen ola...

 

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags: , , , , | Categories: Hata, Programlama, Veritabanı Posted by okutbay on 10.05.2007 22:31 | Yorumlar (0)

Bu hatayı aldığınız zaman panik yapmayın.

Genellikle bir veritabanı tablosunun verilerini bir webform üzerine sürükle bırak ile listelemeye çalıştığınızda Visual Studio sizin için gerekli kontrolleri ve sorguları oluşturur. Burada Visual Studio nun bilmediği şey sizin veritabanınızda bu değerlerin nasıl oluşturulduğu konusudur.

Veritabanı tasarımı yaparken, genelde tablolar içinde veri satırını tanımakta kullanacağımız bir alan oluştururuz. Bu alanları genelde kayıt eklendiğinde otomatik olarak artacak şekilde ayarlarız ve veritabanı sisteminin bu işi bizim yerimize yapmasına izin veriririz. İyiki de veririz yoksa her seferinde bu alanın değerini de veritabanına göndermemiz gerekirdi.

İşte hatamız tam da bu konuyla ilgili. Visual studio tarafından oluşturulan INSERT cümlesine baktığınızda bu cümle içinde ilgili ID alanının da yeraldığını göreceksiniz. Hatayı gidermek için bu alanı sorgu cümlesi içinden çıkarmanız yeterli olacaktır.

Hatalı Sorgu:

INSERT INTO [Icerikler] ([Icerik_Id], [Baslik], [Icerik]) VALUES (?, ?, ?)

Düzeltilmiş Sorgu:

INSERT INTO [Icerikler] ([Baslik], [Icerik]) VALUES (?, ?)

Klavyeleriniz şen ola...!

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5