Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

डेटाबेस नाम को SQL मल्टीपार्ट आइडेंटिफ़ायर में संयोजित करें

ऐसा कुछ करने के लिए आपको गतिशील एसक्यूएल का उपयोग करना होगा।

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

संदर्भ:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2008 - उन्नत खोज/छँटाई

  2. माता-पिता के रिकॉर्ड खोजने के लिए रिकर्सिव सीटीई

  3. SQL सर्वर 2019 (ज्ञात बग) में मूल रूप से संकलित संग्रहीत प्रक्रिया को निष्पादित करते समय "आंतरिक कनेक्शन घातक त्रुटि"

  4. प्रक्रिया या फ़ंक्शन cdc.fn_cdc_get_all_changes_ के लिए अपर्याप्त संख्या में तर्क दिए गए थे

  5. SQL सर्वर के बीच