我正在转换一个过程以使用链接服务器,因为它引用的数据库现在已迁移到单独的集群。我几乎完成了这项工作,但我并没有停留在以下部分;
declare @CustomerId int
set @CustomerId = 2
exec (N'
USE [DatabaseName]
SELECT @DiskUsageDataObjectsKB = SUM(alloUni.used_pages) * 8
FROM sys.tables sysTab
INNER JOIN sys.indexes ind
ON sysTab.OBJECT_ID = ind.OBJECT_ID and ind.Index_ID<=1
INNER JOIN sys.partitions parti
ON ind.OBJECT_ID = parti.OBJECT_ID AND ind.index_id = parti.index_id
INNER JOIN sys.allocation_units alloUni
ON parti.partition_id = alloUni.container_id
WHERE SCHEMA_NAME(sysTab.SCHEMA_ID) = CAST('+ @CustomerId +' AS NVARCHAR(MAX))') AT [LinkedServer]
select @DiskUsageDataObjectsKB
如您所见,我正在使用动态 SQL 将 CustomerId 变量传递给此变量,但我不确定如何将 @DiskUsageDataObjectsKB 值返回给过程,以便将其添加到我们的报告数据库中。
请问有人对如何做到这一点有什么建议吗?
非常感谢!汤姆
您应该将 sp_executesql 与输出参数一起使用。
我从这里得到了例子。
好吧,事实证明我只是把整件事复杂化了。我只需要像往常一样将 [LinkedServer].[DatabaseName] 值添加到脚本中。
我不知道你可以在引用 sys 对象时这样做,但你可以。