sql etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
sql etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

initcap: set first letter uppercase, rest of other lowercase

CREATE FUNCTION [dbo].[InitCap] ( @InputString varchar(4000) )
RETURNS VARCHAR(4000)
AS
BEGIN

DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @PrevChar CHAR(1)
DECLARE @OutputString VARCHAR(255)

SET @OutputString = LOWER(@InputString)
SET @Index = 1

WHILE @Index <= LEN(@InputString)
BEGIN
SET @Char = SUBSTRING(@InputString, @Index, 1)
SET @PrevChar = CASE WHEN @Index = 1 THEN ' '
ELSE SUBSTRING(@InputString, @Index - 1, 1)
END

IF @PrevChar IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&', '''', '(')
BEGIN
IF @PrevChar != '''' OR UPPER(@Char) != 'S'
SET @OutputString = STUFF(@OutputString, @Index, 1, UPPER(@Char))
END

SET @Index = @Index + 1
END

RETURN @OutputString

END
GO


http://www.sql-server-helper.com/functions/initcap.aspx

bir tablo uzerinden iliskili diger tabloyu guncelleme

UPDATE TABLE1
SET Column1 = (SELECT TABLE2.Column1
     FROM TABLE2
WHERE TABLE2.IDColumn = TABLE1.IDColumn)

update yayin
set ukod = s.ukod
     from yayin y, sayfa1$ s
where s.yayinno = y.yayinno

bir tablonun id alanina deger atamak

DECLARE @ID decimal
SET @ID = 0

DECLARE #cursor CURSOR FOR
(SELECT _ID FROM _TABLE)

OPEN #cursor
FETCH NEXT FROM #cursor

WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE _TABLE
SET _ID = @ID + 1
WHERE CURRENT OF #cursor
SET @ID = @ID + 1
FETCH NEXT FROM #cursor
END

CLOSE #cursor
DEALLOCATE #cursor

kayıt silmede foreign key engeli nasıl aşılır

foreign key nedeniyle silinemeyen kayıtlar için şu bir çözüm olabilir mi:

1. durum:
örneğin product için en fazla 1 category belirtilebilecek bile olsa, bunu product_category tablosunda tutarak, istendiğinde category'yi silebiliriz ve product çekilirken category çekilmez, bu da herhangi bir sorun oluşturmaz.

cascade bir çözüm olabilir mi?

bir category sileceğim diye bu category'deki bütün product'ları silmenin anlamı var mı?

2. durum:
prod_usagearea tablosu için örnek:
prodid ve usageareaid foreignkey

The DELETE statement conflicted with the REFERENCE constraint "FK_Prod_UsageArea_UsageArea1". The conflict occurred in database "Himerpa", table "dbo.Prod_UsageArea", column 'UsageAreaID'.
The statement has been terminated.

çözüm: delete rule : cascade

sql - update table with join

-- 2 related tables

update t1
set t1.Field = t2.Field
from Table1 t1
join Table2 t2 on t1.id = t2.id

-- 3 related tables


update t1 p
set t1.f1 =
(
select distinct t3.f3
from t3
inner join t2 on t2.f2 = t3.f3
where t2.f2 = t1.f1
order by t3.f3
)

Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1

Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1


Hatalı:
BEGIN
SET NOCOUNT ON;
BEGIN TRAN
BEGIN TRY
IF(...)
BEGIN
...
COMMIT TRAN
SELECT 1
END
END TRY
BEGIN CATCH
ROLLBACK TRAN
SELECT ERROR_MESSAGE() -- işlem başarısız
END CATCH
END

Doğru:
BEGIN
SET NOCOUNT ON;
IF(...)
BEGIN TRY
BEGIN TRAN
...
COMMIT TRAN
SELECT 1
END TRY
BEGIN CATCH
ROLLBACK TRAN
SELECT ERROR_MESSAGE() -- işlem başarısız
END CATCH
END

Veri çekme teknikleri - 1

Örn: Notice tablosu

Bir view oluştur: Vw_Notice_List

Bu view notice ile ilgili tüm kullanılacak alanları çeksin (ilişkili diğer tablolarla gerekli bağları da kurarak).

Bir adet notice'i çekmek için Notice_Get sp'si yaz. Bu sp de view'e parametre olarak NoticeID göndersin ve gerekli alanlarını çeksin (normal durumda get sp'si list sp'lerinden daha fazla alan çekecektir. örneğin description gibi bir text alanı genellikle list sp'lerinde istenmeyecektir.).
Listeleme için yine view'i kullan. Bu kez daha az alan çekilecektir.

Anasayfada örneğin bir sildeshow kontrolü içinde gösterilecek notice'ler içinse, ayrı bir sp (Notice_ListShowcase) yaz. Bu sp'de ise description alanının örneğin 200 karakterini çek.

sql dönen kayıt sayısını sınırlamak

Declare @RowCount int


IF @RowCount > 0
Set ROWCOUNT @RowCount

search this blog (most likely not here)