jac*_*ack 2 sql-server type-conversion
我正在尝试填充服务包是否需要更新的列(版本状态)。我创建了一个查找表,其中列出了 SQL 版本和最新产品版本,例如 SQLVersion LatestSP SQL Server 2016 13.0.5026.0
然后,我有第二个表,其中包含产品版本,并希望将此值与 LatestSP 值进行比较,如果第一个表中的值小于第二个表中的值,则 SP 不是最新的。我需要指定两个表中的产品版本以 X 开头(即 SQL 2014 以 12 开头,SQL 2016 以 13 开头),然后比较数字(这样我只比较正确的版本),如果值Servers 中的值小于 SPLookup 中的值,然后使用“NEEDS UPDATING”填充 versionstatus 列。但是,我在将 sql_variant 转换为 varchar 以便能够选择前 2 位数字时遇到问题。
这是我到目前为止所拥有的,并将其推断到其他版本。Servers 表中的productversion 是sql_variant,SPLookup 中的LatestSP 是varchar。
INSERT INTO Servers
(versionstatus)
SELECT CASE WHEN LEFT(X.productversion, 2) = '12' AND LEFT(Y.LatestSP, 2) = '12' AND X.productversion < Y.LatestSP THEN 'UPDATE NEEDED'
WHEN LEFT(X.productversion, 2) = '12' AND LEFT(Y.LatestSP, 2) = '12' AND X.productversion >= Y.LatestSP THEN 'UP TO DATE'
END AS versionstatus
FROM Servers X INNER JOIN SPLookup Y ON X.productversion = Y.LatestSP
Run Code Online (Sandbox Code Playgroud)
在应用该函数之前尝试将列显式转换sql_variant为。下面的简单例子对我有用。varcharLEFT
Declare @V sql_variant
set @v = '13.0.5026.0'
select left(convert(varchar(max),@v),2)
Run Code Online (Sandbox Code Playgroud)
| (No column name) |
|------------------|
| 13 |
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9554 次 |
| 最近记录: |