带有FROM子句中的参数的动态SQL

时间:2013-11-20 14:47:08

标签: sql tsql sql-server-2005

通过sp_executesql执行动态SQL块,其中@ Database1变量是存储过程的参数。

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

INNER JOIN '+@DB+'.sys.schemas s
  ON t.schema_id = s.schema_id'

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

但是我不确定如何在动态SQL的from子句中使用sp_executesql调用中的参数。是可以这样做还是我应该考虑采用不同的方法?

1 个答案:

答案 0 :(得分: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