Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nối tên cơ sở dữ liệu trong mã định danh nhiều phần SQL

Bạn sẽ phải sử dụng sql động để làm điều gì đó tương tự.

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;

Để tránh nối trực tiếp một tham số với một chuỗi sql đã thực thi, tôi đã bọc tham số này trong các lệnh gọi tới db_name()db_id() . Điều này sẽ trả về null cho một tên cơ sở dữ liệu không hợp lệ, nhưng sẽ không ngăn ai đó tham chiếu đến cơ sở dữ liệu mà bạn không muốn họ tham khảo. Cân nhắc so sánh giá trị tham số với danh sách trắng.

Tham khảo:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thử bắt Không thể xử lý bảng thay đổi

  2. Truy vấn trên các trường datetime có mili giây cho kết quả sai trong SQL Server

  3. SQL sửa đổi dữ liệu bảng thành một biểu mẫu nhỏ gọn hơn

  4. Chuỗi kết nối SQL Server Express 2008 bị thiếu trong web.config

  5. PHP 5.3 không nhận ra Native Client để kết nối với MS SQL