Hi experts, so somewhere in this block, it encounters a sql_variant data type and fails with:
"Msg 257, Level 16, State 3, Line 25
Implicit conversion from data type sql_variant to varchar is not allowed. Use the CONVERT function to run this query."
- except for DateInstalled, all table columns are defined as varchar
- It fails on the Insert statement. How can I know which line/column is failing?
- After playing with the CONVERT for sql_variant, I can't get the syntax right.
Thanks for any tips.
Here is the block of code that fails:
CREATE TABLE #CPUValues(
[index] SMALLINT,
[description] VARCHAR(128),
[server_cores] SMALLINT,
[value] VARCHAR(5)
)
CREATE TABLE #MemoryValues(
[index] SMALLINT,
[description] VARCHAR(128),
[server_memory] DECIMAL(10,2),
[value] VARCHAR(64)
)
INSERT INTO #CPUValues
EXEC xp_msver 'ProcessorCount'
INSERT INTO #MemoryValues
EXEC xp_msver 'PhysicalMemory'
INSERT INTO [dbo].[InstanceConfigurations]
([ServerName]
,[Version]
,[Edition]
,[SPLevel]
,[BuildNumber]
,[AuthenticationType]
,[Port]
,[Collation]
,[DateInstalled]
,[BackupCompressionDefault]
,[ServerMemory]
,[MinSQLMemory]
,[MaxSQLMemory]
,[ServerCores]
,[SQLCores])
SELECT
SERVERPROPERTY('SERVERNAME') as Server,
(SELECT
CASE
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '8%' THEN 'SQL Server 2000'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '9%' THEN 'SQL Server 2005'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '10.0%' THEN 'SQL Server 2008'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '10.5%' THEN 'SQL Server 2008 R2'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '11%' THEN 'SQL Server 2012'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '12%' THEN 'SQL Server 2014'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '13%' THEN 'SQL Server 2016'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '14%' THEN 'SQL Server 2017'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '15%' THEN 'SQL Server 2019'
ELSE 'UNKNOWN'
END) as Version,
(SELECT SUBSTRING(CONVERT(VARCHAR(255),SERVERPROPERTY('EDITION')),0,CHARINDEX('Edition',CONVERT(VARCHAR(255),SERVERPROPERTY('EDITION')))) + 'Edition') AS Edition,
SERVERPROPERTY('ProductLevel') AS 'Service_Pack_Level',
SERVERPROPERTY('ProductVersion') AS 'Build_Number',
(SELECT CASE SERVERPROPERTY('IsIntegratedSecurityOnly')
WHEN 1 THEN 'Windows Authentication'
WHEN 0 THEN 'Windows and SQL Server Authentication'
END) as AuthenticationType,
(SELECT DISTINCT local_tcp_port FROM sys.dm_exec_connections WHERE session_id = @@SPID) As Port,
(SELECT SERVERPROPERTY('collation') AS SQLServerCollation) As Collation,
(SELECT create_date FROM sys.server_principals WHERE sid = 0x010100000000000512000000) As DateInstalled,
(select [value_in_use] from sys.configurations
where name = 'Backup compression default') As BackupCompressionDefault,
(SELECT ROUND(CONVERT(DECIMAL(10,2),server_memory/1024.0),1) FROM #MemoryValues) AS server_memory,
(SELECT [value] FROM sys.configurations WHERE name like '%min server memory%') AS min_server_memory,
(SELECT [value] FROM sys.configurations WHERE name like '%max server memory%') AS max_server_memory,
server_cores,
(SELECT COUNT(*) AS 'sql_cores' FROM sys.dm_os_schedulers WHERE status = 'VISIBLE ONLINE') AS sql_cores
FROM #CPUValues
LEFT JOIN (
SELECT
CASE
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '8%' THEN 'SQL Server 2000'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '9%' THEN 'SQL Server 2005'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '10.0%' THEN 'SQL Server 2008'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '10.5%' THEN 'SQL Server 2008 R2'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '11%' THEN 'SQL Server 2012'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '12%' THEN 'SQL Server 2014'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '13%' THEN 'SQL Server 2016'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '14%' THEN 'SQL Server 2017'
WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('PRODUCTVERSION')) like '15%' THEN 'SQL Server 2019'
ELSE 'UNKNOWN'
END AS sql_version
) AS v ON 1 = 1
DROP TABLE #CPUValues
DROP TABLE #MemoryValues