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

Bagaimana cara mengurai VARCHAR yang diteruskan ke prosedur tersimpan di SQL Server?

Jika memungkinkan, jangan gunakan varchar untuk hal semacam ini, gunakan tabel parameter yang dihargai sebagai gantinya.

Untuk menggunakan parameter nilai tabel, Anda harus terlebih dahulu mendeklarasikan tipe tabel yang ditentukan pengguna:

CREATE TYPE IntList As Table
(
    IntValue int
)

Kemudian ubah prosedur tersimpan Anda untuk menerima variabel ini alih-alih nvarchar:

create proc Sp_ReturnPrdoucts
    @BrandIds dbo.IntList readonly -- Note: readonly is a must!
AS
BEGIN

SELECT * 
FROM tbl_Products as p 
join tbl_Brands b on p.ProductBrandId=b.BrandId 
join @BrandIds ON(b.BrandId = IntValue)

END

Masalahnya adalah bahwa IN() operator mengharapkan daftar variabel yang dipisahkan dengan koma, sementara Anda memberikan satu variabel yang nilainya adalah string yang dipisahkan koma.

Jika Anda tidak dapat menggunakan parameter bernilai tabel, Anda dapat menggunakan fungsi pemisahan string di sql untuk mengonversi nilai varchar ke tabel int. ada banyak splitter di luar sana, saya akan merekomendasikan membaca artikel ini sebelum memilih satu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mengonversi stempel waktu Epoch ke server sql (format yang dapat dibaca manusia)

  2. Inner Bergabung dengan tiga tabel

  3. Bagaimana Fungsi STRING_ESCAPE() Bekerja di SQL Server (T-SQL)

  4. Sql LEFT OUTER JOIN dengan klausa WHERE

  5. Cara memfilter Baris dengan Nilai Null di Select Statement di SQL Server - Tutorial SQL Server / TSQL Bagian 110