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()
và 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: