更改SQL Server中SELECT中的列数据类型

更改SQL Server中SELECT中的列数据类型,sql,sql-server,Sql,Sql Server,我想将分类ID中的列值从数字更改为文本 这可能吗 SELECT name, CAST(categoriID AS char(10)) FROM customer WHERE categoriID = 1 AS 'new_text' 这是我想要的图片链接:在SQL Server 2008上更改表客户更改分类ID分类ID文本: EXEC sp_RENAME table_name , old_name, new_name 或者你可以: 编辑:我刚收到问题。要将列的数据类型更改为文本数据类型,可以

我想将分类ID中的列值从数字更改为文本

这可能吗

SELECT name, CAST(categoriID AS char(10)) 
FROM customer
WHERE categoriID = 1 AS 'new_text'

这是我想要的图片链接:

在SQL Server 2008上更改表客户更改分类ID分类ID文本:

EXEC sp_RENAME table_name , old_name, new_name
或者你可以:

编辑:我刚收到问题。要将列的数据类型更改为文本数据类型,可以执行以下操作:

ALTER TABLE table_name MODIFY column_name CHARACTER(n);
其中n是字符串中的字符数,或:

ALTER TABLE table_name MODIFY column_name VARCHAR(n)
其中n是字符串中的最大字符数

请注意,这些将编辑原始表。如果只想选择列作为特定数据类型,则需要使用以下方法复制表:

SELECT column_name(s) INTO newtable [IN externaldb] FROM table1;

然后,可以如上所示修改列数据类型,如果需要,可以删除新表。另一种不使用单独表格的方法是使用

1最简单的解决方案是简单连接,因此:

SELECT  c.name, c.categoryID, category.name AS category_name
FROM    customer c
INNER JOIN -- or LEFT JOIN if categoryID allows NULLs
(
SELECT 1, 'First category' UNION ALL
SELECT 2, 'Second category' UNION ALL
SELECT 3, 'Third category'
) category(categoryID, name) ON c.categoryID = category.categoryID
如果类别列表很小,是静态的,并且仅用于此查询,我会使用此解决方案

2否则,我将创建一个新表

CREATE TABLE category -- or dbo.cateogory (note: you should use object's/table's schema)
(
    categoryID INT NOT NULL,
        CONSTRAINT PK_category_categoryID PRIMARY KEY(categoryID),
    name NVARCHAR(50) NOT NULL -- you should use the propper type (varchar maybe) and max length (100 maybe)
    --,      CONSTRAINT IUN_category_name UNIQUE(name) -- uncomment this line if you want to have unique categories (nu duplicate values in column [name])
);
GO
另外,我将创建一个外键,以确保[customer]表中的类别也存在于[category]表中:

ALTER TABLE customer 
ADD CONSTRAINT FK_customer_categoryID 
FOREIGN KEY (categoryID) REFERENCES category(categoryID)
GO

INSERT category (categoryID, name)
SELECT 1, 'First category' UNION ALL
SELECT 2, 'Second category' UNION ALL
SELECT 3, 'Third category'
GO
您的查询将是

SELECT  c.name, c.categoryID, ctg.name AS category_name
FROM    customer c
INNER JOIN ctg ON c.categoryID = ctg.categoryID -- or LEFT JOIN if c.categoryID allows NULLs 

我将使用解决方案2。

您可以使用此查询更改列数据类型

语法:

ALTER TABLE table_name ALTER COLUMN column_name datatype;
解决方案:

ALTER TABLE customer ALTER COLUMN categoriID Varchar(50);

我想将categorid中的数据更改为新文本,categorid是一个整数,如WHERE dosent中所示work@roYal:当categorid=1时,是否要获取新的\u文本?当categorid=2时,是否要获取新的文本?是,但不在列中。我想更改行中的数据你想以某种方式更改数据的值吗?在转换为CHAR10后,它已经是一个文本值。我不想更改DB中的任何内容,我只想将其显示为Selected感谢您的澄清。我正在编辑这篇文章,以反映对这个问题的新理解。谢谢,这就是我要找的
ALTER TABLE customer ALTER COLUMN categoriID Varchar(50);