sql >> Database >  >> RDS >> Sqlserver

Voeg de databasenaam samen in een meerdelige SQL-id

Je zou dynamische sql moeten gebruiken om zoiets te doen.

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;

Om te voorkomen dat een parameter direct aan een uitgevoerde sql-tekenreeks wordt gekoppeld, heb ik de parameter verpakt in aanroepen naar db_name() en db_id() . Dit zou null retourneren voor een ongeldige databasenaam, maar zou iemand er niet van weerhouden te verwijzen naar een database die u niet wilt. Overweeg de parameterwaarde te vergelijken met een witte lijst.

Referentie:



  1. Windows Phone 8.1-app maakt verbinding met een database

  2. Wijzigingsmelding Oracle-database met ODP.NET werkt niet

  3. Is er een automatisch wijzigingstijdstempeltype voor Oracle-kolommen?

  4. mysql-connector cpp in centos 6 ongedefinieerde verwijzing naar