如何在没有科学记数法的情况下将bigint作为nvarchar存储在SQL Server表中?

时间:2019-07-04 09:26:10

标签: sql sql-server tsql

我需要将数字值作为字符串存储在SQL表中(由于某些ID包含非数字字符),但是如果不使用科学计数法存储它就很难实现这一点,这不是问题如果我可以在视图中进行调整,但这样做会丢失最后几个数字。

我已经尝试过(就像查询一样)将其强制转换为bigint,然后转换为nvarchar语句中的INSERT INTO,但这并不影响它的存储方式

这是我要实现的目标:

CREATE TABLE [dbo].[customer_comp](
    [customer_ref] [nvarchar](50) NULL,
    [customer_name] [nvarchar](255) NULL
) ON [PRIMARY]

INSERT INTO [customer_comp] 
    (customer_ref, customer_name)
VALUES
    ('199000243', 'John Smith'),
    ('CR-222-3X0D', 'Jane Smith');

预期结果:

+--------------+---------------+
| customer_ref | customer_name |
+--------------+---------------+
| 199000243    | John Smith    |
| CR-222-3X0D  | Jane Smith    |
+--------------+---------------+

我不断得到的结果:

+--------------+---------------+
| customer_ref | customer_name |
+--------------+---------------+
| 1.9900e+003  | John Smith    |
| CR-222-3X0D  | Jane Smith    |
+--------------+---------------+

如果我以完全错误的方式进行此操作,我将以这种方式存储它,因为某些值以“ AAA-NNNA-NNAA”之类的字母数字格式存储,而有些值都是数字“ NNNNNNNN”,因此要求该列接受nvarchar。

1 个答案:

答案 0 :(得分:1)

以防万一将来有人偶然发现此问题,您可以INSERT INTO非常简单,而无需强制转换数据。像下面这样将数值转换为bigint,然后转换为nvarchar将导致科学计数形式被存储:

CAST(CAST(customer_ref as bigint) as nvarchar(50))