【问题标题】:Unable to get master.sys.sp_MSforeachdb to insert into table无法让 master.sys.sp_MSforeachdb 插入到表中
【发布时间】:2014-04-17 12:55:53
【问题描述】:

我正在使用 master.sys.sp_MSforeachdb sp 从多个数据库中提取数据。选择查询工作正常,但是当我尝试将其插入表中时,它会返回一个错误。如何将每个结果插入到我创建的表中?

消息 245,第 16 级,状态 1,第 4 行 将 nvarchar 值 'master' 转换为数据类型 int 时转换失败。

EXECUTE master.sys.sp_MSforeachdb 'USE [?]; 

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Insert INTO Connstrings.dbo.Results(host_name,user_name,program_name,request_duration_ms,[database])
select s.host_name, s.original_login_name AS user_name, s.program_name, 
(DATEDIFF (ms,last_request_end_time, last_request_start_time )) AS request_duration_ms, DB_NAME() AS [database]
FROM sys.dm_exec_requests r
join sys.dm_exec_sessions s 
on r.session_id = s.session_id'

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    Connstrings.dbo.Results 表中的[database] 列的类型为INT。要么更改表定义:

    alter table Results alter column [database] sysname
    

    或更改查询:

    EXECUTE master.sys.sp_MSforeachdb 'USE [?]; 
    
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    Insert INTO Connstrings.dbo.Results(host_name,user_name,program_name,request_duration_ms,[database])
    select s.host_name, s.original_login_name AS user_name, s.program_name, 
    (DATEDIFF (ms,last_request_end_time, last_request_start_time )) AS request_duration_ms, DB_ID() AS [database]
    FROM sys.dm_exec_requests r
    join sys.dm_exec_sessions s 
    on r.session_id = s.session_id'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 2013-01-11
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多