Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menggunakan hasil ekspresi (mis. Panggilan fungsi) dalam daftar parameter prosedur tersimpan?

Anda perlu menggunakan variabel perantara. SQL Server tidak mendukung operasi semacam ini dalam daftar parameter itu sendiri meskipun telah ada di daftar TODO selama beberapa tahun! (Lihat Connect Item:Menggunakan fungsi skalar sebagai parameter prosedur tersimpan)

Tata bahasa untuk EXEC adalah

[ { EXEC | EXECUTE } ]
    { 
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var } 
        [ [ @parameter = ] { value 
                           | @variable [ OUTPUT ] 
                           | [ DEFAULT ] 
                           }
        ]
      [ ,...n ]
      [ WITH <execute_option> [ ,...n ] ]
    }
[;]

Dokumentasi saat ini tidak begitu jelas tentang format yang dapat diterima untuk value tetapi tampaknya hanya ekspresi "sederhana" seperti nilai literal atau @@ fungsi sistem awalan (seperti @@IDENTITY ). Fungsi sistem lainnya seperti SCOPE_IDENTITY() tidak diizinkan (bahkan yang tidak memerlukan tanda kurung seperti CURRENT_TIMESTAMP tidak diperbolehkan).

Jadi untuk saat ini Anda perlu menggunakan sintaks seperti di bawah ini

DECLARE @pID INT;

SET @pID = 1;

/*If 2008+ for previous versions this needs to be two separate statements*/
DECLARE @string VARCHAR(50) = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11))

EXEC WriteLog
  'Component',
  'Source',
  @string 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cari Tahu apakah Objek adalah Tabel Buatan Pengguna di SQL Server dengan OBJECTPROPERTY()

  2. cara menghubungkan sql server menggunakan driver JTDS di Android

  3. Pisahkan rentang tanggal menjadi satu baris per bulan di server sql

  4. Kelola Konkurensi Transaksi Menggunakan Kunci di SQL Server

  5. VALUES Clause di SQL Server