ऐसा कुछ करने के लिए आपको गतिशील एसक्यूएल का उपयोग करना होगा।
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;
एक निष्पादित एसक्यूएल स्ट्रिंग के पैरामीटर को सीधे संयोजित करने से बचने के लिए, मैंने पैरामीटर को db_name()
पर कॉल में लपेट दिया और db_id()
. यह अमान्य डेटाबेस नाम के लिए शून्य वापस आ जाएगा, लेकिन किसी ऐसे डेटाबेस को संदर्भित करने से नहीं रोकेगा जिसे आप नहीं चाहते हैं। एक सफेद सूची के खिलाफ पैरामीटर मान की तुलना करने पर विचार करें।
संदर्भ: