Missing Index SQL

Otomatik Index Üreten SQL Scripti

Çalışan database de script çalıştırılınca işe yarar boş database de yada aktif olarak çalışmayan database de boş döner

SELECT    
dm_mid.database_id AS DatabaseID,
dm_migs.avg_user_impact*(dm_migs.user_seeks+dm_migs.user_scans) Avg_Estimated_Impact,
dm_migs.last_user_seek AS Last_User_Seek,
OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) AS [TableName],
'CREATE INDEX [IX_' + OBJECT_NAME(dm_mid.OBJECT_ID,dm_mid.database_id) + '_'
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.equality_columns,''),', ','_'),'[',''),']','') 
+ CASE
WHEN dm_mid.equality_columns IS NOT NULL
AND dm_mid.inequality_columns IS NOT NULL THEN '_'
ELSE ''
END
+ REPLACE(REPLACE(REPLACE(ISNULL(dm_mid.inequality_columns,''),', ','_'),'[',''),']','')
+ ']'
+ ' ON ' + dm_mid.statement
+ ' (' + ISNULL (dm_mid.equality_columns,'')
+ CASE WHEN dm_mid.equality_columns IS NOT NULL AND dm_mid.inequality_columns 
IS NOT NULL THEN ',' ELSE
'' END
+ ISNULL (dm_mid.inequality_columns, '')
+ ')'
+ ISNULL (' INCLUDE (' + dm_mid.included_columns + ')', '') AS Create_Statement
FROM sys.dm_db_missing_index_groups dm_mig
INNER JOIN sys.dm_db_missing_index_group_stats dm_migs
ON dm_migs.group_handle = dm_mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details dm_mid
ON dm_mig.index_handle = dm_mid.index_handle
WHERE dm_mid.database_ID = DB_ID()
ORDER BY Avg_Estimated_Impact DESC
GO
ASCII Table

ASCII Table

Dec  = Decimal Value
Char = Character

'5' has the int value 53
if we write '5'-'0' it evaluates to 53-48, or the int 5
if we write char c = 'B'+32; then c stores 'b'


Dec  Char                           Dec  Char     Dec  Char     Dec  Char
---------                           ---------     ---------     ----------
  0  NUL (null)                      32  SPACE     64  @         96  `
  1  SOH (start of heading)          33  !         65  A         97  a
  2  STX (start of text)             34  "         66  B         98  b
  3  ETX (end of text)               35  #         67  C         99  c
  4  EOT (end of transmission)       36  $         68  D        100  d
  5  ENQ (enquiry)                   37  %         69  E        101  e
  6  ACK (acknowledge)               38  &         70  F        102  f
  7  BEL (bell)                      39  '         71  G        103  g
  8  BS  (backspace)                 40  (         72  H        104  h
  9  TAB (horizontal tab)            41  )         73  I        105  i
 10  LF  (NL line feed, new line)    42  *         74  J        106  j
 11  VT  (vertical tab)              43  +         75  K        107  k
 12  FF  (NP form feed, new page)    44  ,         76  L        108  l
 13  CR  (carriage return)           45  -         77  M        109  m
 14  SO  (shift out)                 46  .         78  N        110  n
 15  SI  (shift in)                  47  /         79  O        111  o
 16  DLE (data link escape)          48  0         80  P        112  p
 17  DC1 (device control 1)          49  1         81  Q        113  q
 18  DC2 (device control 2)          50  2         82  R        114  r
 19  DC3 (device control 3)          51  3         83  S        115  s
 20  DC4 (device control 4)          52  4         84  T        116  t
 21  NAK (negative acknowledge)      53  5         85  U        117  u
 22  SYN (synchronous idle)          54  6         86  V        118  v
 23  ETB (end of trans. block)       55  7         87  W        119  w
 24  CAN (cancel)                    56  8         88  X        120  x
 25  EM  (end of medium)             57  9         89  Y        121  y
 26  SUB (substitute)                58  :         90  Z        122  z
 27  ESC (escape)                    59  ;         91  [        123  {
 28  FS  (file separator)            60  <         92  \        124  |
 29  GS  (group separator)           61  =         93  ]        125  }
 30  RS  (record separator)          62  >         94  ^        126  ~
 31  US  (unit separator)            63  ?         95  _        127  DEL

Kaynak : https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

Delphi FMX Mobil de Enter Tuşu İle İlermek

Mobil uygulama klavyedeki Enter tuşuna basınca sonraki işleme yapmak için kullandığım kod

procedure TForm.SifreKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  if sender is TEdit then
    if Key in [vkReturn] then
      case TEdit(sender).ReturnKeyType   of
        TReturnKeyType.Send : Button1Click(Self);
      end;
end;
Delphi FMX Grid Renklendirme

Delphi Firemonkey string grid renklendirme kodu

procedure TForm.StringGrid1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
 
begin
 aRowColor := TBrush.Create(TBrushKind.Solid, TAlphaColors.Alpha);
 
if Sartim > 0 then
  aRowColor.Color := TAlphaColorRec.Aqua
else
if Sartim  = 0 Then
  ARowColor.Color := TAlphaColorRec.Lime
else
if Sartim  <  0 then
  aRowColor.Color := TAlphaColorRec.Aliceblue;
 
aNewRectF := Bounds;
aNewRectF.Inflate(3, 3);
Canvas.FillRect(aNewRectF, 0, 0, [], 1, aRowColor);
Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
 
aRowColor.free;
 
 
 
end;
SQL Server İki Tablo Arası Update

Aşağıdaki script ile farklı tablolardan update işlemi yapılabilir


   UPDATE T1
   SET UPDATEALAN = T2.VERIALANI
   FROM UPDATETABLO T1
   JOIN VERITABLO T2
   ON T1.[UPDATEESLESMEALANI] = T2.VERIESLESME ALANI



Birden fazla alanı güncellemek için ise SET alanınındaki yerleri virgül ile ayırarak birden fazla alanı güncelleyebiliriz

       SET UPDATEALAN = T2.VERIALANI , UPDATEALAN2 = T2.VERIALANI2 , UPDATEALAN3 = T2.VERIALANI3
SQL Server Link Server Oluşturma
exec sp_addlinkedserver @server='LinkServerADI', @srvproduct='', @provider='SQLOLEDB', @datasrc='SERVERADI'
exec sp_addlinkedsrvlogin 'LinkServerADI', 'False', Null, 'SQLKullanıcı', 'SQLŞifre'


Script Çalıştırıldıktan sonra

Link server oluşturduğumuz serverdaki tabloları aşağı komut ile görüntüleyebiliriz

select * from LinkServerADI.Database.dbo.Tablo
SQL Server Log Dosyası Küçültme

Sql Server daki ldf dosyalarının boyutlarını aşağıdaki script ile küçültebiliriz

USE   DatabaseName
ALTER DATABASE  DatabaseName
SET RECOVERY SIMPLE
GO


USE   DatabaseName
DBCC SHRINKFILE (DatabaseName_Log, 500)  --- Buradaki 500 yazısı log dosyasının küçültüleceği boyutudur bu örnek de  500 mb olarak küçültülür
GO

USE   DatabaseName
ALTER DATABASE  DatabaseName
SET RECOVERY FULL
GO
E-Fatura QR Code Ekleme

E-Fatura xlst template dosyamıza qr code ekleyebiliriz. Bunun için bir web api yada base64 e çevrilmiş bir qrcode resmi kullanmamız gerekir

Gösteceğim örnek dinamik gelen bir qrcode verisini web api kullanarak qrcode u base64 olarak alıp e-fatura dosyasında göstereceğiz .

	<img>
		  <xsl:attribute name="src"> https://api.qrserver.com/v1/create-qr-code/?data=https://www.ahmetaydinlik.com&amp;size=150x150</xsl:attribute>
		  <xsl:attribute name="height">150</xsl:attribute>
		  <xsl:attribute name="width">150</xsl:attribute>
	</img>

xsl:attribute komutu ile image nesnemin özelliklerini atıyorum.

eğer burada dinamik bir veri dönüştürmek isteseydik src verimizin içeriğini değiştirirek api serverdaki data parametresine dinamik verimizi eklersek istediğimiz veriyi bize 150px boyutunda bir qrcode oluşturur

ekran görüntüsü

aşağıdaki komut ile örneğe bakabilirsiniz


<img>
     <xsl:attribute name="src"> https://api.qrserver.com/v1/create-qr-code/?data=<xsl:for-each select="//n1:DespatchAdvice/cbc:Note[2]"><xsl:value-of select="."/></xsl:for-each>&amp;size=150x150</xsl:attribute>
	 <xsl:attribute name="height">150</xsl:attribute>
	 <xsl:attribute name="width">150</xsl:attribute>
</img>


Burada e-fatura xml dosyasında gelen not 2 deki veriyi qrcode a yerleştirdik

E-Fatura Not Alanından Veri Alma

E-Fatura xslt template dosyasında not alanlarına yazılmış olan notlardan belirli karakterler arasında veri almak için aşağıdaki komutu kullanabiliriz

     <xsl:for-each select="//n1:DespatchAdvice/cbc:Note[3]">									 
	      <xsl:value-of select="substring-before(substring(.,0,21),'#')"/>	
	 </xsl:for-each>


Yukarıda yazılı olan substring-before komutu ile not alanında gelen kelimin 0 ıncı karakterinden başyalıp 21 inci karaktere kadar yazmasını istedik