sql >> Databáze >  >> RDS >> Sqlserver

Spojte název databáze do vícedílného identifikátoru SQL

K něčemu takovému byste museli použít dynamický 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;

Abych se vyhnul přímému zřetězení parametru do provedeného řetězce SQL, zabalil jsem parametr do volání db_name() a db_id() . To by vrátilo hodnotu null pro neplatný název databáze, ale nezabránilo by to někomu v odkazování na databázi, kterou nechcete. Zvažte porovnání hodnoty parametru s bílou listinou.

Odkaz:



  1. Získat hodnotu sloupce předchozího řádku v postgresu nelze použít funkci okna v UPDATE

  2. jBPM 6.5 + Tomcat 8 + transakce Bitronix + konfigurace Oracle 11G | Nelze potvrdit relaci java.lang.NullPointerException

  3. Chyba ORA-12514 po restartování serveru

  4. Jak přeskočit s dalšími dalšími záznamy při dosažení stavu?