通过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调用中的参数。是可以这样做还是我应该考虑采用不同的方法?
答案 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