2013-11-20 3 views
0

Выполнение блока динамического SQL через sp_executesql, где переменная @ Database1 является параметром хранимой процедуры.Динамический SQL с параметром в FROM FROM

SET @SQL = '' 
SET @SQL = 
'SELECT @@SERVERNAME, @DB, ''Schema name'', s.name, t.name, stype.Name, scol.length 
INTO ##TableList 
FROM '[email protected]+'.sys.tables t 

INNER JOIN '[email protected]+'.sys.schemas s 
    ON t.schema_id = s.schema_id' 

EXEC sp_executesql @SQL, N'@DB UNIQUEIDENTIFIER', @DB = @Database1 

Однако я не уверен, как использовать параметр при вызове sp_executesql, в статье из динамического SQL. Можно ли это сделать или я должен рассмотреть другой подход?

+0

Если это всего лишь тест или внутренняя вещь, возможно, подумайте об использовании 'sp_MSforeachtable'. Он недокументирован/может быть удален в любое время, но делает именно то, что вы пытаетесь сделать. [Здесь] (http://blogs.msdn.com/b/chrissk/archive/2010/06/27/example-code-executing-tsql-for-each-table-in-a-database.aspx) пример , – Bridge

ответ

0

Попробуйте выполнить следующую процедуру:
Не знаю, что такое «Название схемы», поэтому я оставляю его. Попытайтесь изменить его.

ALTER PROCEDURE [dbo].[Procedure] 

(
    @DB   VARCHAR(50) 
) 
AS 
DECLARE @SQL NVARCHAR(max); 

BEGIN 

CREATE TABLE #TableList(
       SERVERNAME NVARCHAR(255), 
       DB NVARCHAR(255), 
       Schema_name NVARCHAR(255), 
       s_name NVARCHAR(255), 
       t_name NVARCHAR(255), 
       stype_Name NVARCHAR(255), 
       scol_length INTEGER); 

    SET @SQL ='INSERT INTO #TableList(
          SERVERNAME, 
          DB, 
          Schema_name, 
          s_name, 
          t_name, 
          stype_Name, 
          scol_length) 
       SELECT  @@SERVERNAME, 
          @DB, 
          ''Schema name'', 
          s.name, 
          t.name, 
          stype.Name, 
          scol.length 
       FROM  [' + @DB + '].[sys].[tables] t 
       INNER JOIN [' + @DB + '].[sys].[schemas] s ON (t.schema_id = s.schema_id)' 

EXEC sp_executesql @SQL; 

SELECT SERVERNAME, 
     DB, 
     Schema_name, 
     s_name, 
     t_name, 
     stype_Name, 
     scol_length 
FROM #TableList 

END 
GO 
Смежные вопросы