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

Gabungkan nama database dalam pengidentifikasi multi-bagian SQL

Anda harus menggunakan sql dinamis untuk melakukan hal seperti itu.

declare @sql nvarchar(max);
declare @params nvarchar(max);

set @params= N'@pNrodcto int, @pTipodcto int, @pUsuario int, @pEmpresa char(20)';

set @sql = N'INSERT INTO CONTROL_LOGISTICA.dbo.ITEMS_TRAMITE (NRODCTO, TIPODCTO, PRODUCTO, EMPRESA, CODUSUARIO, CODUBICA, CANTIDAD, CCHECK_HIJO) 
  SELECT @pNrodcto,@pTipodcto,M.PRODUCTO,@pEmpresa,@pUsuario,M.CODUBICA,M.CANTIDAD,0
  FROM '+db_name(db_id(@pEmpresa))+'.dbo.MVTRADE M WITH(NOLOCK) --Here im stuck
  INNER JOIN Dbo.vReporteMercia_ESP P ON P.PRODUCTO = M.PRODUCTO
  WHERE M.CANTIDAD <> 0 AND M.Origen = ''FAC'' 
  AND M.NRODCTO = @pNrodcto AND M.TIPODCTO = @pTipodcto';
exec sp_executesql @sql, @params, @pNrodcto, @pTipodcto, @pUsuario, @pEmpresa;

Untuk menghindari penggabungan parameter secara langsung ke string sql yang dieksekusi, saya membungkus parameter dalam panggilan ke db_name() dan db_id() . Ini akan mengembalikan null untuk nama database yang tidak valid, tetapi tidak akan menghentikan seseorang untuk mereferensikan database yang tidak Anda inginkan. Pertimbangkan untuk membandingkan nilai parameter dengan daftar putih.

Referensi:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Transpos baris dan kolom tanpa agregat

  2. replikasi antara dua tabel dengan nama yang berbeda dan yang memiliki nama kolom yang berbeda. Apakah mungkin untuk membuat replikasi seperti itu?

  3. SQL Server SP - Lewati parameter untuk daftar array IN?

  4. Waktu kueri habis saat dijalankan dari web, tetapi sangat cepat saat dijalankan dari SSMS

  5. Entity Framework/SQL2008 - Bagaimana cara Memperbarui bidang LastModified secara Otomatis untuk Entitas?