Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 11240|Yanıt: 0

[Kaynak] Sıradan SQL ifadeleri exec ile çalıştırılabilir

[Bağlantıyı kopyala]
Yayınlandı 9.02.2015 14:44:30 | | |
1: Sıradan SQL ifadeleri exec ile çalıştırılabilir

* from tableName seç
exec('tableName'den * seç')
exec sp_executesql N'select * from tableName' -- Diziden önce N eklemeniz gerektiğini unutmayın

2: Değişken olarak alan isimleri, tablo isimleri, veritabanı adları vb. kullanılırken, dinamik SQL kullanılmalıdır

@fname varchar ilan edecek(20)
set @fname = 'FiledName'
TableName üzerinden @fname seçin -- Hata, hata sorulmaz, ancak sonuç sabit bir değer FiledName olur, bu istediğiniz şey değildir.
exec('select' + @fname + ' from tableName') -- artı işaretinden önce ve sonra tek tırnak işaretinin yanına bir boşluk eklendiğini not edin

Tabii ki, diziyi değişken biçimine de dönüştürebilirsiniz
@fname varchar ilan edecek(20)
set @fname = 'FiledName' --Alan adını ayar

declare @s varchar(1000)
@s = tableName'den 'seç' + @fname + ' ayarla'
exec(@s) -- başarı
yönetici sp_executesql @s -- Bu cümle bir hata bildirecek

@s Nvarchar(1000) ilan edin -- burada bunun nvarchar(1000) olarak değiştirildiğini unutmayın.
@s = tableName'den 'seç' + @fname + ' ayarla'
exec(@s) -- başarı
Yönetici sp_executesql @s -- bu cümle doğru

3. Çıkış parametreleri
declare @num int, @sqls nvarchar(4000)
@sqls='tableName'den count(*) seç'
yönetici(@sqls)

--Yönetici yürütme sonucunu bir değişkene nasıl koyabilirim?

declare @num int, @sqls nvarchar(4000)
@sqls='tableName 'dan @a=count(*) seç '
exec sp_executesql @sqls,N'@a int output'@num çıktı
Select @num


1: Sıradan SQL ifadeleri Exec ile çalıştırılabilir Örnek: TableName üzerinden * seç
                Exec('tableName'den * seç')
                Exec sp_executesql N'select * from tableName' -- Diziden önce N eklemeniz gerektiğini unutmayın

2: Değişken olarak alan isimleri, tablo isimleri, veritabanı adları vb. kullanılırken, dinamik SQL kullanılmalıdır

    Hata: @fname varchar(20) ilan edecek
                set @fname = 'FiledName'
                TableName üzerinden @fname seçin -- Hata, hata sorulmaz, ancak sonuç sabit bir değer FiledName olur, bu istediğiniz şey değildir.
    Doğru: Exec('select ' + @fname + ' from tableName') -- tek tırnak yerine plus işaretinden önce ve sonra bir boşluk eklendiğini fark edin

    Tabii ki, diziyi değişken biçimine de dönüştürebilirsiniz
                @fname varchar ilan edecek(20)
                set @fname = 'FiledName' --Alan adını ayar

                declare @s varchar(1000)
                @s = tableName'den 'seç' + @fname + ' ayarla'
                Yönetici(@s) -- Başarı
                yönetici sp_executesql @s -- Bu cümle bir hata bildirecek

              --Not: @s parametre ntext veya nchar veya nvarchar tipinde olmalı, declare @s varchar(1000) değiştirilmeli, @s nvarchar(1000) dekare edilmeli



               Şöyle:
                @s Nvarchar(1000) ilan edin -- burada bunun nvarchar(1000) olarak değiştirildiğini unutmayın.

                set @fname = 'FiledName' --Alan adını ayar
                @s = tableName'den 'seç' + @fname + ' ayarla'
                Yönetici(@s) -- Başarı   
                Yönetici sp_executesql @s -- bu cümle doğru

3. Giriş veya çıkış parametreleri

      (1) Giriş parametreleri:
          Declare @QueryString nvarchar(1000) -- dinamik sorgu ifadesi değişkeni (not: ntext veya nchar nvarchar tipi olmalıdır, varchar tipi değil)
          Declare @paramstring nvarchar(200) - Dinamik ifadede parametre dizesini ayarlayın (not: ntext veya nchar nvarchar tipi olmalıdır, varchar tipi değil)
          declare @input_id int - dinamik ifadeye iledilecek parametrelerin değerini tanımlar

          @QueryString='Tablo adından * seç burada id=@id' --id alan adıdır, @id iletilecek parametredir
          küme @paramstring='@id int' -- Dinamik ifadedeki parametreleri tanımlayan diziyi ayarlar
          @input_id =1 -- Dinamik ifadede iledilecek parametrenin değerini 1 olarak ayarlayın
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          Birden fazla parametre varsa:
          Declare @QueryString nvarchar(1000) -- dinamik sorgu ifadesi değişkeni (not: ntext veya nchar nvarchar tipi olmalıdır, varchar tipi değil)
          Declare @paramstring nvarchar(200) - Dinamik ifadede parametre dizesini ayarlayın (not: ntext veya nchar nvarchar tipi olmalıdır, varchar tipi değil)
          declare @input_id int - Dinamik ifadeye iledilecek parametrenin değerini tanımlar, parametre 1
          declare @input_name varchar(20) - dinamik ifadeye iledilecek argümanın değerini tanımlar, parametre 2

          @QueryString='Table Name'den Select* ayarlayın; burada id=@id ve name=@name' --id ve name alan adlarıdır ve @id ile @name iletilecek parametrelerdir
          küme @paramstring='@id int,@name varchar(20)' -- Dinamik ifadedeki parametrelerin tanımının dizisini "," ile ayrılarak ayarlayın.
          @input_id =1 -- Dinamik ifadede iledilecek parametrenin değerini 1 olarak ayarlayın
          @input_name='Zhang San' --Dinamik ifadede iledilecek parametrenin değerini 'Zhang San' olarak ayarlayın
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Argümanların sırasına dikkat edin
     (2) Çıkış parametreleri
             declare @num int, @sqls nvarchar(4000)
            @sqls='tableName'den count(*) seç'
            yönetici(@sqls)
        --Yönetici yürütme sonucunu bir değişkene nasıl koyabilirim?         
        declare @QueryString nvarchar(1000) -- dinamik sorgu adı değişkeni (Not: ntext veya nchar nvarchar tipi olmalıdır, varchar tipi değil)
        Declare @paramstring nvarchar(200) - Dinamik ifadede parametre dizesini ayarlayın (not: ntext veya nchar nvarchar tipi olmalıdır, varchar tipi değil)
        declare @output_result int - sorgu sonucu @output_result

        @QueryString='tablonameden @totalcount=count(*)' ayarı --@totalcount çıktı parametresidir
        @paramstring='@totalcount int çıktı' --Dinamik ifadedeki parametrelerle tanımlanan diziyi "," ile ayırarak ayarlayın.
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result çıktı
        Select @output_result
        Tabii ki, giriş ve çıkış parametreleri birlikte kullanılabilir, böylece kendiniz deneyebilirsiniz.
        Ayrıca, dinamik ifade sorgusunun sonuç kümesini çıkarmak istiyorsanız, sadece geçici tablolar kullanma yöntemini düşünüyorum, daha iyi bir yolun var mı bilmiyorum.
        IF object_id('[tempdb].[ dbo].#tmp') NULL DEĞILDIR -- Geçici tablo #tmp var mı olduğunu belirleyin, varsa silin
            Bırak masa #tmp
        * seçin * içine #tmp Tablename ile 1=2 -- Tablename ile aynı yapıya sahip geçici bir tablo #tmp oluşturun

        declare @QueryString nvarchar(1000) -- dinamik sorgu adı değişkeni (Not: ntext veya nchar nvarchar tipi olmalıdır, varchar tipi değil)
        @QueryString='Tabloname'den Seç * '
        #tmp(field1,field2,...) exec(@querystirng) içine ekleyin




Önceki:Tablo verilerini boşaltma SQL yöntemi
Önümüzdeki:Son günlerden SQL notları
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com