我在UPDATE語句中使用Cast Function時遇到問題。具體而言,它發生在行如何在動態T-SQL中使用CAST?
Y= CAST(SUBSTRING(@p,CHARINDEX(',',@p),LEN(@p)) AS DECIMAL(38,10))
。 IT不允許我提取我想要的數據。在這個例子中,錯誤是「錯誤將數據類型nvarchar轉換爲數字。」。再次發生錯誤發生在集Y.我試圖讓X和Y出POINT。有人能告訴我Y語句發生了什麼嗎?我正在測試Y更新如下:
SELECT SUBSTRING('2532.3,32523.2'
,CHARINDEX(',','2532.3,32523.2')
,LEN('2532.3,32523.2'));
它的工作原理。我不知道它有什麼問題。謝謝。
CREATE TABLE dbo.POINTS (
I INT IDENTITY NOT NULL
,Point varchar(81) NOT NULL
,X decimal(38,10) NULL
,Y decimal(38,10) NULL
)
GO
INSERT dbo.POINTS (Point) VALUES ('(45.123,22.5)')
INSERT dbo.POINTS (Point) VALUES ('(7.95,3.45)')
INSERT dbo.POINTS (Point) VALUES ('(100.2,15.498)')
GO
Answer:
DECLARE @p AS VARCHAR(81), @i AS INT =1;
DECLARE CS CURSOR FAST_FORWARD FOR
Select Point FROM dbo.POINTS;
OPEN CS
FETCH NEXT FROM CS INTO @p;
WHILE @@FETCH_STATUS=0
BEGIN
DECLARE @x AS INT = CHARINDEX(',',@p);
UPDATE dbo.POINTS
SET X = CAST(SUBSTRING(@p,2,@x-2) AS DECIMAL(38,10)),
Y = CAST(SUBSTRING(@p,@x,LEN(@p)[email protected]) AS DECIMAL(38,10))
WHERE [email protected];
SET @i [email protected]+1;
FETCH NEXT FROM CS INTO @p;
END
CLOSE CS
DEALLOCATE CS
從這個字符串'45.123,22.5'你想投的十進制值是什麼??? –
這些值中的每一個都是十進制的。 CAST將爲45.123,22.5中的每個值工作。 45.123將被鑄造並插入到X中,22.5將被鑄造並插入到Y. – user1874435
一個CURSOR中進行如此簡單的操作:S –