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

Bagaimana cara menambahkan atribut khusus ke string koneksi SQL?

Tidak ada metode umum untuk meneruskan atribut string koneksi khusus melalui API Klien dan mengambilnya menggunakan T-SQL. Anda memiliki sejumlah alternatif, meskipun. Di bawah ini adalah beberapa.

Metode 1 :Gunakan kata kunci Nama Aplikasi dalam string koneksi untuk meneruskan hingga 128 karakter dan mengambil dengan fungsi T-SQL APP_NAME():

Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DB;Data Source=SERVER;Application Name="SomeAttr=SomeValue"

SELECT APP_NAME();

Perhatikan bahwa ini dibatasi hingga 128 karakter dan Anda perlu mengurai muatannya. Juga, karena ADO.NET membuat kumpulan koneksi terpisah untuk setiap string koneksi yang berbeda, pertimbangkan secara efektif akan ada sedikit atau tidak ada kumpulan koneksi database.

Metode 2 :Jalankan SET CONTEXT_INFO setelah terhubung dan tetapkan hingga 128 byte yang dapat diambil dengan fungsi T-SQL CONTEXT_INFO):

DECLARE @context_info varbinary(128) = CAST('SomeAttr=SomeValue' AS varbinary(128));
SET CONTEXT_INFO @context_info;

SELECT CAST(CONTEXT_INFO() AS varchar(128));

Perhatikan bahwa ini dibatasi hingga 128 byte dan Anda perlu mengurai muatannya.

Metode 3 :Buat tabel sementara tingkat sesi setelah terhubung dan masukkan pasangan nama/nilai yang dapat diambil dengan kueri SELECT:

CREATE TABLE #CustomSessionAttributes(
      AttributeName varchar(128) PRIMARY KEY
    , AttributeValue varchar(1000));
INSERT INTO #CustomSessionAttributes VALUES('SomeAttr', 'SomeValue');

SELECT AttributeValue 
FROM #CustomSessionAttributes 
WHERE AttributeName = 'SomeAttr';

Perhatikan bahwa Anda dapat meningkatkan ukuran dan jenis nilai atribut sesuai kebutuhan, dan tidak diperlukan penguraian.

Metode 4 :Buat tabel permanen yang dikunci oleh id sesi dan nama atribut, masukkan pasangan nama/nilai setelah koneksi yang dapat diambil dengan kueri SELECT:

CREATE TABLE dbo.CustomSessionAttributes(
      SessionID smallint
    , AttributeName varchar(128)
    , AttributeValue varchar(1000)
    , CONSTRAINT PK_CustomSessionAttributes PRIMARY KEY (SessionID, AttributeName)
    );
--clean up previous session
DELETE FROM dbo.CustomSessionAttributes WHERE SessionID = @@SPID; 
--insert values for this session
INSERT INTO dbo.CustomSessionAttributes VALUES(@@SPID, 'SomeAttr', 'SomeValue');

--retreive attribute value
SELECT AttributeValue 
FROM dbo.CustomSessionAttributes 
WHERE
    SessionID = @@SPID 
    AND AttributeName = 'SomeAttr';

Perhatikan bahwa Anda dapat meningkatkan ukuran dan jenis nilai atribut sesuai kebutuhan, dan tidak diperlukan penguraian.

EDIT:

Metode 5 :Gunakan prosedur tersimpan sp_set_session_context untuk menyimpan pasangan nama/nilai cakupan sesi dan mengambil nilai dengan fungsi SESSION_CONTEXT(). Fitur ini diperkenalkan di SQL Server 2016 dan Azure SQL Database.

EXEC sp_set_session_context 'SomeAttr', 'SomeValue';
SELECT SESSION_CONTEXT(N'SomeAttr');


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 Cara Membantu Mencegah Overload Peringatan dengan SQL Server Monitoring

  2. Database Sistem SQL Server – Pemeliharaan MSDB

  3. Bagaimana cara mendapatkan hari terakhir minggu lalu di sql?

  4. Memilih Prosesor untuk SQL Server 2014 – Bagian 1

  5. Buat Fungsi Buatan Pengguna Skalar di SQL Server