如何为MSSQL表列添加PRI与AI属性?C#连库前置需求
我来帮你搞定这个问题!首先得明确MSSQL里的对应概念:你说的PRI其实就是主键(Primary Key),AI是自增列(IDENTITY属性),下面分两种场景给你具体操作方法,最后再给你C#连接数据库的基础代码:
给MSSQL表列添加主键(PRI)和自增(AI)属性
场景1:表还没创建,直接在建表时设置
如果你的表还未创建,直接在CREATE TABLE语句里给目标列同时设置IDENTITY和主键就行。举个例子(假设你的表叫Users,要把Id列设为主键+自增):
CREATE TABLE Users ( Id INT IDENTITY(1,1) PRIMARY KEY, -- IDENTITY(起始值, 增量)实现自增,PRIMARY KEY设为主键 Username NVARCHAR(50) NOT NULL, Email NVARCHAR(100) NOT NULL );
IDENTITY(1,1):表示从1开始,每次新增数据自动加1;PRIMARY KEY:确保该列的值唯一且非空,是表的唯一标识。
场景2:表已经存在,修改现有列添加属性
MSSQL不能直接修改已有列的IDENTITY属性,所以得根据你的数据情况选方法:
方法1:删除原有列后重新添加(适合列无数据或数据可备份迁移)
如果目标列还没有数据,或者数据可以先备份,直接删了重加:
-- 先删除原有列(记得先备份数据!) ALTER TABLE 你的表名 DROP COLUMN 目标列名; -- 重新添加列,同时设置自增和主键 ALTER TABLE 你的表名 ADD 目标列名 INT IDENTITY(1,1) PRIMARY KEY;
方法2:通过临时表迁移数据(适合列已有数据需要保留)
如果目标列已经有数据不想丢失,就用临时表中转:
-- 1. 创建临时表,复制原表所有数据 SELECT * INTO #TempTable FROM 你的表名; -- 2. 删除原表 DROP TABLE 你的表名; -- 3. 重新创建原表,给目标列设置自增和主键 CREATE TABLE 你的表名 ( 目标列名 INT IDENTITY(1,1) PRIMARY KEY, -- 把其他列按原表结构写在这里,比如: 列1 NVARCHAR(50) NOT NULL, 列2 INT NULL ); -- 4. 把临时表的数据导回新表(允许手动插入自增列的值) SET IDENTITY_INSERT 你的表名 ON; INSERT INTO 你的表名 (目标列名, 列1, 列2) SELECT 目标列名, 列1, 列2 FROM #TempTable; SET IDENTITY_INSERT 你的表名 OFF; -- 5. 删除临时表 DROP TABLE #TempTable;
C#连接MSSQL数据库的基础代码
搞定表的属性后,用C#连接数据库很简单,用SqlConnection就行,给你一个基础示例:
using System; using System.Data.SqlClient; class Program { static void Main() { // 替换成你的数据库连接信息 string connectionString = "Server=你的服务器地址;Database=你的数据库名;User Id=数据库用户名;Password=数据库密码;"; // 如果是本地SQL Server Express,用Windows身份验证的话可以这样写: // string connectionString = @"Server=.\SQLEXPRESS;Database=你的数据库名;Integrated Security=True;"; using (SqlConnection connection = new SqlConnection(connectionString)) { try { connection.Open(); Console.WriteLine("数据库连接成功!"); // 示例:执行查询语句 string querySql = "SELECT * FROM 你的表名"; using (SqlCommand command = new SqlCommand(querySql, connection)) { using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { // 这里处理查询到的数据,比如打印出来 Console.WriteLine($"目标列值:{reader["目标列名"]},列1值:{reader["列1"]}"); } } } } catch (Exception ex) { Console.WriteLine($"出错了:{ex.Message}"); } } } }
内容的提问来源于stack exchange,提问作者RoyalNil
相关产品推荐
相关产品推荐

