我有一个导入结果的数据库。数据库是可交付的,我没有自己进行导入,也无法访问原始数据来自己进行导入。也就是说,有一个整数值被导入到文本数据类型中。所有存储的值都是有效整数。我不断得到:
Explicit conversion from data type text to int is not allowed.
如果我尝试更改表中的字段数据类型。我还在表中创建了一个新的 INT 字段,并尝试根据 TEXT 字段中的值更新它,但收到相同的错误。最后,我尝试创建一个新表并尝试插入旧值,但无法成功转换或转换为 int。
最佳答案
这似乎有效:CONVERT(INT, CONVERT(VARCHAR(MAX),myText))
编辑:
我不完全确定内部转换的最佳选择是什么...选择 VARCHAR(N)
和 N > 10
或 VARCHAR (MAX)
的优点是不通过截断来防止溢出(假设在这种情况下溢出是首选行为)。
此外,转换为 INT
似乎将前导空格视为零。因此 VARCHAR(MAX)
减少了错误地获取零的机会。例如:
CREATE TABLE #foo ( bar TEXT )
INSERT INTO #foo
VALUES (' 10')
SELECT CONVERT (INT, CONVERT(VARCHAR(MAX),bar)) FROM #foo -- 10
SELECT CONVERT (INT, CONVERT(VARCHAR(10),bar)) FROM #foo -- 0
可能最好的办法是进行一些验证,以确保输入满足您的要求。
关于sql-server - 将存储为文本数据类型的数字转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15346002/