2017-09-27 152 views
0

我有以下需要作为exec语句的一部分运行的SQL。我正在努力的是让撇号正确。如果我只用1个撇号运行它,那么该语句就可以正常运行,并且我认为有2个可以将它转义出来,从而允许它工作。撇号,使用EXEC处理

任何想法?

exec 
(' 
SELECT COALESCE(NULLIF(CAST((DATEDIFF(mi,sqlserver_start_time,GetDate())/1440) as varchar),''0'') + '' day(s), '','''') 
+ COALESCE(NULLIF(CAST(((DATEDIFF(mi,sqlserver_start_time,GetDate())%1440)/60) as varchar),''0'') + '' hour(s), '','''') 
+ CAST((DATEDIFF(mi,sqlserver_start_time,GetDate())%60) as varchar) + ''min'' as Uptime 
FROM sys.dm_os_sys_info) as Uptime, 
CAST(LEFT((RIGHT(@@version, LEN(@@version)- 3 -charindex ('' ON '',@@VERSION))),CHARINDEX(''<'',(RIGHT(@@version, LEN(@@version)- 3 -charindex ('' ON '',@@VERSION))),0)-2) as nvarchar(300)) as OS, 
cast(serverproperty(''MachineName'') as nvarchar(255)) MachineName, 
cast(serverproperty(''ServerName'') as nvarchar(255)) ServerInstanceName, 
cast(LEFT(@@VERSION,CHARINDEX(''('',@@VERSION,0)-2) as nvarchar(300)) as Version, 
cast(replace(cast(serverproperty(''Edition'')as varchar),''Edition'','''') as varchar(max)) Edition, 
cast(serverproperty(''productVersion'') as nvarchar(255)) ProductBuildLevel, 
cast(serverproperty(''productLevel'') as nvarchar(255)) SPLevel, 
cast(serverproperty(''Collation'') as nvarchar(255)) CollationType, 
cast(serverproperty(''IsClustered'') as nvarchar(255)) [IsClustered], 
cast((select physical_memory_kb/1024 FROM sys.dm_os_sys_info) as int) AS PhysicalMemory,  
cast((select value from sys.configurations where name = ''min server memory (MB)'') as int) as MinMemory, 
cast((select value from sys.configurations where name = ''max server memory (MB)'') as int) as MaxMemory, 
cast((select cpu_count FROM sys.dm_os_sys_info) as int) AS LogicalCPUCount, 
cast((select hyperthread_ratio FROM sys.dm_os_sys_info) as int) AS HyperthreadRatio, 
cast((select cpu_count/hyperthread_ratio FROM sys.dm_os_sys_info) as int) AS PhysicalCPUCount 
') 

我得到的错误是:

Msg 102, Level 15, State 1, Line 5 
Incorrect syntax near ')'. 
Msg 156, Level 15, State 1, Line 15 
Incorrect syntax near the keyword 'as'. 
Msg 156, Level 15, State 1, Line 16 
Incorrect syntax near the keyword 'as'. 
Msg 156, Level 15, State 1, Line 17 
Incorrect syntax near the keyword 'as'. 
Msg 156, Level 15, State 1, Line 18 
Incorrect syntax near the keyword 'as'. 
Msg 156, Level 15, State 1, Line 19 
Incorrect syntax near the keyword 'as'. 
Msg 156, Level 15, State 1, Line 20 
Incorrect syntax near the keyword 'as'. 
+0

它可能会帮助您打印您尝试执行的语句并手动对其执行可视化扫描。例如,当我这样做时,它可以让我很容易地看到第5行的错误:'FROM sys.dm_os_sys_info)Uptime,'在这里语法不正确。我相信你的查询的开始应该是'SELECT(SELECT'),你在这里省略了第二个“select”。如果你调整了它,你的查询运行良好。 – ZLK

回答

1

有一对夫妇在您发布的查询错误的。尝试

EXEC ('SELECT COALESCE(NULLIF(CAST((DATEDIFF(mi,sqlserver_start_time,GetDate())/1440) as varchar),''0'') + '' day(s), '','''') 
+ COALESCE(NULLIF(CAST(((DATEDIFF(mi,sqlserver_start_time,GetDate())%1440)/60) as varchar),''0'') + '' hour(s), '','''') 
+ CAST((DATEDIFF(mi,sqlserver_start_time,GetDate())%60) as varchar) + ''min'' as Uptime, 
CAST(LEFT((RIGHT(@@version, LEN(@@version)- 3 -charindex ('' ON '',@@VERSION))),CHARINDEX(''<'',(RIGHT(@@version, LEN(@@version)- 3 -charindex ('' ON '',@@VERSION))),0)-2) as nvarchar(300)) as OS, 
cast(serverproperty(''MachineName'') as nvarchar(255)) MachineName, 
cast(serverproperty(''ServerName'') as nvarchar(255)) ServerInstanceName, 
cast(LEFT(@@VERSION,CHARINDEX(''('',@@VERSION,0)-2) as nvarchar(300)) as Version, 
cast(replace(cast(serverproperty(''Edition'')as varchar),''Edition'','''') as varchar(max)) Edition, 
cast(serverproperty(''productVersion'') as nvarchar(255)) ProductBuildLevel, 
cast(serverproperty(''productLevel'') as nvarchar(255)) SPLevel, 
cast(serverproperty(''Collation'') as nvarchar(255)) CollationType, 
cast(serverproperty(''IsClustered'') as nvarchar(255)) [IsClustered], 
cast((select physical_memory_kb/1024 FROM sys.dm_os_sys_info) as int) AS PhysicalMemory,  
cast((select value from sys.configurations where name = ''min server memory (MB)'') as int) as MinMemory, 
cast((select value from sys.configurations where name = ''max server memory (MB)'') as int) as MaxMemory, 
cast((select cpu_count FROM sys.dm_os_sys_info) as int) AS LogicalCPUCount, 
cast((select hyperthread_ratio FROM sys.dm_os_sys_info) as int) AS HyperthreadRatio, 
cast((select cpu_count/hyperthread_ratio FROM sys.dm_os_sys_info) as int) AS PhysicalCPUCount 
FROM sys.dm_os_sys_info as Uptime') 
+0

非常感谢:) – Philip