2017-09-27 155 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