Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Свържете името на базата данни в многочастен SQL идентификатор

Ще трябва да използвате динамичен 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;

За да избегна директно свързване на параметър към изпълнен sql низ, обвих параметъра в извиквания на db_name() и db_id() . Това ще върне null за невалидно име на база данни, но няма да попречи на някого да препраща към база данни, която не искате. Помислете за сравняване на стойността на параметъра с бял списък.

Справка:



  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 Server 2005 datetime във формат „HH:mm tt“.

  2. Включват ли границите на диапазона между MS SQL Server?

  3. как да защитите базата данни от Windows удостоверяване

  4. Как да получите броя на шестте седмици в неделя с помощта на Weekno в SQL Server 2008?

  5. Как да ПРОМЕНЯ няколко колони наведнъж в SQL Server