none
Stored Procedures olusturamama hatası RRS feed

  • Soru

  • Acaba Bu koda bakarak bana nerde hata yaptıgımı söylermisiniz ? Hep Hata Veriyor aldıgım hata 

    Msg 102, Level 15, State 1, Procedure sp_personelkayıt, Line 8
    Incorrect syntax near 'nchar'.

    Çözemedim :(

    CREATE PROCEDURE sp_personelkayıt

    @[Adı Soyadı] [nchar](25) ,
    @[Tc] [nchar](25) ,
    @[Adresi] [nchar](10) ,
    @[ülke] [nchar](25) ,
    @[il] [nchar](25) ,
    @[İlçe] [nchar](25) ,
    @[Posta Kodu] [nchar](25) ,
    @[Banka] [nchar](25) ,
    @[Sube] [nchar](25),
    @[Tel] [nchar](25) ,
    @[Cep] [nchar](25) ,
    @[Birimi] [nchar](25) ,
    @[BabaAdı] [nchar](25) ,
    @[Anne Adı] [nchar](25) ,
    @[Mezuniyet] [nchar](25) ,
    @[EnsonMezunolduguokul] [nchar](25) ,
    @[Ehliyet] [nchar](25) ,
    @[İbanNo] [nchar](25) ,
    @[Resim] [image] 

    AS
    BEGIN

    SET NOCOUNT ON;

     INSERT INTO personelkayıt
                             ( [Adı Soyadı], Tc, Adresi, ülke, il, İlçe, [Posta Kodu], Banka, Sube, Tel, Cep, Birimi, BabaAdı, [Anne Adı], Mezuniyet, EnsonMezunolduguokul, Ehliyet, İbanNo, 
                             Resim)
    VALUES        ( N'[Adı Soyadı]', N'Tc', N'Adresi', N'ülke', N'il', N'İlçe', N'[Posta Kodu]', N'Banka', N'Sube', N'Tel', N'Cep', N'Birimi', N'BabaAdı', N'[Anne Adı]', N'Mezuniyet', 
                             N'EnsonMezunolduguokul', N'Ehliyet', N'İbanNo')

    END
    GO


    Hayat Bazen Yasamaya Deger Oldugu Kadar Ölmeyede Deger


    23 Şubat 2013 Cumartesi 17:18

Yanıtlar

  • Parametreler yanlış tanımlanmış, aşağıdaki gibi olmalı:

    CREATE PROCEDURE sp_personelkayıt

    @AdiSoyadi nchar(25) ,
    @Tc nchar(25) ,
    ...

    Ayrıca VALUES kısmında da Önay'ın da belirttiği gibi parametreler kullanılmalı, yoksa ne anlamı var parametrelerin?

    Not: Parametre/değişken adı olarak Türkça karakter kullanmazsan garip hatalar ve sorunlarla karşılaşma şansın azalır.


    Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3 | http://ekremonsoy.blogspot.com

    24 Şubat 2013 Pazar 14:15

Tüm Yanıtlar

    1. Benim gördüğüm 2 hata var, [nchar] olan yerleri nchar olarak değiştirin
    2. values içindeki N['Adı Soyadı'] gibi olan yerlerde yanlış olmuş, @[Adı Soyadı] şeklinde değiştirin

    Bir Öneri: nchar veritipi fixed-length tiptir, ilerde sorgularınızda size sorunlar çıkarabilir. Örneğin Ad alanına Ali kaydederken yanına 22 adet boşluk karakteride kaydeder, bunun yerine nvarchar(25) kullanın. Ama IBAN için char(26) uygundur çünkü tüm iban numaraları 26 karakterdir. Benzer şekilde TC Kimlik no da char(11) olabilir çünkü tüm tc kimlik nolar 11 karakterdir. Tc kimlik no için nchar yazmaya gerek yok çünkü n(national) yani utf-8 karakterleri destekler bunada gerek yok. Posta kodu da char(5) saklanabilir.

    Yanlış anlamazsanız bi eleştiri yapayım, tablo yapınız oldukça kötü. Veri tipleri yanlış tarih alanını char saklarsanız sıralama yada tarih sorgularınız düzgün çalışmaz. İl ve ilçeyi ayrı ayrı kaydetmeye gerek yok, İller ve İlçeler adında 2 tablonuz olmalı , bu tabloda sadeçe ilçe_id saklamalısınız.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    24 Şubat 2013 Pazar 08:57
  • Tesekkür ederim 

     [nchar] olan adları temizledim gene aynı hatayı verdi 

    verilen uzunlukları weter uni  gelen talimatlara göre hazırladıgım için :( onlara mudahale etme sansım yok ben olsam daha farklı bir çalısma yapardım ama bu projeyi bir şekilde bitirmem lazım :( 

    bu sekilde olmak zorunda farklı bir önerin ollursa cok sevinirim 

    SELECT        dbo.ülke.NAME AS Ülke, dbo.il.NAME AS Şehir, dbo.ilçe.NAME AS ilçe, dbo.Vergidairesi.NAME, dbo.Postakodları.CODE
    FROM            dbo.ülke INNER JOIN
                             dbo.il ON dbo.ülke.Code = dbo.il.COUNTRYCODE INNER JOIN
                             dbo.ilçe ON dbo.il.ID = dbo.ilçe.CITYCODE INNER JOIN
                             dbo.Vergidairesi ON dbo.il.NAME = dbo.Vergidairesi.ADDR1 INNER JOIN
                             dbo.Postakodları ON dbo.ilçe.CITYCODE = dbo.Postakodları.CITYCODE

    Ülke            şehir         İlçe          Vergi Dairesi                 Posta Kodu 

     
    TÜRKİYE      Ankara     Akyurt     AYAŞ MAL MÜDÜRLÜĞÜ 91183



    Hayat Bazen Yasamaya Deger Oldugu Kadar Ölmeyede Deger

    24 Şubat 2013 Pazar 11:34
  • Parametreler yanlış tanımlanmış, aşağıdaki gibi olmalı:

    CREATE PROCEDURE sp_personelkayıt

    @AdiSoyadi nchar(25) ,
    @Tc nchar(25) ,
    ...

    Ayrıca VALUES kısmında da Önay'ın da belirttiği gibi parametreler kullanılmalı, yoksa ne anlamı var parametrelerin?

    Not: Parametre/değişken adı olarak Türkça karakter kullanmazsan garip hatalar ve sorunlarla karşılaşma şansın azalır.


    Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3 | http://ekremonsoy.blogspot.com

    24 Şubat 2013 Pazar 14:15
  • Tablo içinde kolon isimlerini eskiden " " içinde iki kelime olarak kullanabiliyorduk, şimdi [] içinde kolon isimlerinde space karakterini kullanabiliyoruz.

    Ama Ekrem bey'in dediği gibi SP içindeki parametrelerin isimlerinde boşluk karakterini kullanamıyoruz.

    Parametrelerimizi @Kelime1Kelime2 gibi boşluk bırakmadan tanımlamak zorundayız.


    SQL Server, SQL Server 2012 Denali and T-SQL Tutorials

    25 Şubat 2013 Pazartesi 12:13