【发布时间】:2019-02-17 09:14:24
【问题描述】:
我在使用带有 SUBSTRING 函数调用的 SQL Server CASE 语句时遇到错误:
DECLARE @string VARCHAR(MAX)
SELECT
sys.Netbios_Name0, sys.name0, sys.Operating_System_Name_and0,
sys.AD_Site_Name0, sys1.DisplayName0, sys1.Version0,
sys2.TopConsoleUser0, sys3.model0,
CASE sys.Operating_System_Name_and0
WHEN SUBSTRING(sys.Operating_System_Name_and0, PATINDEX('%[0-9]%', sys.Operating_System_Name_and0), sys.Operating_System_Name_and0) = '6.3'
THEN 'Windows 8'
WHEN SUBSTRING(sys.Operating_System_Name_and0, PATINDEX('%[0-9]%', sys.Operating_System_Name_and0), sys.Operating_System_Name_and0) = '6.2'
THEN 'Windows 8'
WHEN SUBSTRING(sys.Operating_System_Name_and0, PATINDEX('%[0-9]%', sys.Operating_System_Name_and0), sys.Operating_System_Name_and0) = '6.1'
THEN 'Windows 7'
WHEN SUBSTRING(sys.Operating_System_Name_and0, PATINDEX('%[0-9]%', sys.Operating_System_Name_and0), sys.Operating_System_Name_and0) = '6.0'
THEN 'Windows Vista'
WHEN SUBSTRING(sys.Operating_System_Name_and0, PATINDEX('%[0-9]%', sys.Operating_System_Name_and0), sys.Operating_System_Name_and0) = '5.2'
THEN 'Windows XP'
WHEN SUBSTRING(sys.Operating_System_Name_and0, PATINDEX('%[0-9]%', sys.Operating_System_Name_and0), sys.Operating_System_Name_and0) = '5.0'
THEN 'Windows 2000'
ELSE 'sys.Netbios_Name0'
END AS WindowsVersion
FROM
fn_rbac_Add_Remove_Programs(1) sys1
INNER JOIN
v_r_system sys ON sys.ResourceID = sys1.ResourceID
LEFT OUTER JOIN
v_GS_COMPUTER_SYSTEM sys3 ON sys1.ResourceID = sys3.ResourceID
LEFT OUTER JOIN
v_GS_SYSTEM_CONSOLE_USAGE_MAXGROUP sys2 ON sys.Resourceid = sys2.ResourceID
-- WHERE sys1.DisplayName0 LIKE '%' + @prodname + '%' AND sys1.version0 LIKE CONVERT(VARCHAR(10), @variable) + '%'
我收到此错误:
消息 102,第 15 级,状态 1,第 6 行
'=' 附近的语法不正确。
我做错了吗?请告诉我
【问题讨论】:
-
使用
sys作为别名似乎是个坏主意,因为它是每个数据库中的模式。
标签: sql-server tsql