-

SQlServer下载安装(图文教程)

SqlServerSQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。

SQlServer2008下载
2014版安装,测试可用,翻页效果好
https://www.microsoft.com/zh-CN/download/details.aspx?id=42299

2008版安装,测试可用,翻页效果好
在浏览器中输入:https://www.microsoft.com/zh-CN/download/details.aspx?id=30438 >> 选择 SQLEXPR_x64_CHS.exe

2012版安装,测试可用
https://www.microsoft.com/zh-CN/download/details.aspx?id=43351
SQlServer2008安装
双击软件 >> 安装 >> 全新安装 >> 确定(没报错) >> 勾选接受 >> 全部勾选,数据库引擎服务,SQL客户端,目录可换成D文件夹 >> 选择默认实例,实例根目录找D文件夹 >> 点击对所有SQL服务账户,账户名选择(NT AUTHORITY\SYSTEM),密码留空 >> 选择混合模式,输入密码sa123456,点击添加当前用户 >> 不勾选发送错误报告 >> 成功完成

sqlserver2014下载 选择 sqlserver2008下载 选择 安装 注意:sqlserver数据库安装好了,重启电脑,要不然网站在安装时无法连接sqlserver数据库 如果网站连接sqlserver数据库不成功,关闭防火墙 控制面板\所有控制面板项\管理工具\服务 里开启 SQL Server (MSSQLSERVER)

telnet localhost 1433 判断1433端口是否开启 查看1433端口是否开启
如果链接sqlserver数据库可以关闭防火墙 “ 控制面板\所有控制面板项\Windows 防火墙\自定义设置 ”

sqlserver配置管理器
sqlserver配置管理器 >> SQL网络配置 >> MSSQLSERVER协议 >> 开启ICP/IP >> IP地址 >> 全部端口修改成1433

输入:SELECT @@VERSION >> 查看当前sqlserver数据库版本信息 SELECT SERVERPROPERTY('InstanceDefaultDataPath') AS DefaultDataPath, SERVERPROPERTY('InstanceDefaultLogPath') AS DefaultLogPath; >> 查看sqlserver数据库目录

导入mdf文件数据库
进入 Navicat for SQL Server >> 选择数据库 >> 选择左边Queries >> 点击右边 New Query >> 输入需要导入代码
exec sp_attach_db 'webdata','C:\soft\FNLAccount.mdf','C:\soft\FNLAccount_log.ldf'
>> 点击运行 >> 完成

注意:给*.mdf文件添加Everyone全部操作权限

导入导出sql文件数据库
导出sql数据库:
进入 >> Navicat for SQL Server >> 选中dbo >>转储SQL文件 >> 选择结构和数据

导入sql数据库:
进入 >> Navicat for SQL Server >> 选中数据库 >> 运行SQL文件

复制整个表 复制单个表 恢复表 关闭数据库,才可以恢复数据库

Access里表和数据导出到sqlServer数据库里
打开Access软件 >> 选中Tables >> 选择外部数据 >> 其它 >> ODBC数据库 >> 选择 >> SQL Server >> 服务器(local) >> 点击(更改默认的数据库为) >> webdata
缺点:会丢失关键针,会丢失字段的默认值的设置

access数据库导入到SqlServer数据库的第二种方法:
点击下载源码案例(需要借助xiyuetaCMS系统来处理)

注意:
conn.execute("set identity_insert [table] on") '开启自动编号可编辑'
conn.execute("set identity_insert [table] off") '关闭自动编号可编辑'

navicat操作sqlserver

navicat连接sqlserver库,第一步:选择连接数据库 navicat连接sqlserver库,第二步:输入账号密码 navicat创建数据库,第一步:右键 >> 选择创建数据库 navicat创建数据库,第二步:
数据库名:随便写
所有者:sa
排序规则:Chinese_PRC_CI_AS
恢复模式:FULL
兼容级别:80
navicat.exe 最新版连接数据库
出现这个报错,和解决方法
navicat收缩sqlserver日志


USE [xiyueta]
GO
DBCC SHRINKFILE (xiyueta_log, 5)
GO    
                

SqlServer触发器
sqlserver里添加和删除触发器

创建表

CREATE TABLE dbo.userMoneyAudit  
(  
    id INT IDENTITY(1,1) PRIMARY KEY,  
    userid INT,  -- 假设xy_Member表有一个主键是userid  
    oldMoney money,  -- 假设userMoney是DECIMAL类型,精度为10,小数点后2位  
    newMoney money,  
    chaval money,    --旧假差新
    modifiedDate DATETIME DEFAULT(GETDATE()),  
    modifiedBy SYSNAME NULL  -- 如果需要记录是哪个用户修改的,这里可以存储,但通常需要额外逻辑  
);


创建触发器

CREATE TRIGGER trg_AuditUserMoney  
ON dbo.xy_Member  
AFTER UPDATE  
AS  
BEGIN  
    SET NOCOUNT ON;  
  
    -- 检查是否userMoney字段被修改了  
    IF UPDATE(userMoney)  
    BEGIN  
        INSERT INTO dbo.userMoneyAudit (userid, oldMoney, newMoney, chaval, modifiedDate, modifiedBy) 
        SELECT   
            d.id AS userid,  -- 使用id作为主键来关联记录    
            d.userMoney AS oldMoney,  -- 从deleted表中获取旧值    
            i.userMoney AS newMoney,  -- 从inserted表中获取新值    
            i.userMoney - d.userMoney AS chaval,  -- 计算新旧值之间的差值    
            GETDATE() AS modifiedDate,  -- 使用GETDATE()获取当前时间    
            NULL AS modifiedBy  -- 或者你可以考虑使用某种方式记录修改者,比如通过应用程序传递  
        FROM   
            inserted i  
            INNER JOIN deleted d ON i.id = d.id  -- 使用id作为连接条件  
        WHERE   
            i.userMoney <> d.userMoney;  -- 只记录实际发生变更的行  
    END;  
END;


查看  数据库触发器
SELECT name, parent_class, parent_class_desc, type_desc FROM sys.triggers;


删除触发器

DROP TRIGGER trg_AuditUserMoney   




                

navicat操作sqlserver备份恢复表
sqlserver里添加和删除触发器

备份数据库 恢复数据库

修改字段类型
修改表里某字段的类型,类型有约束,直接修改是不可以的

bodycontent的类型从原来的text改为nvarchar(max)

-- 首先,确认新列是否真的被创建了

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'xy_chat' AND COLUMN_NAME = 'bodycontent_new';


-- 如果这个查询没有返回结果,说明新列并没有成功创建。在这种情况下,您需要重新执行添加列的操作:

ALTER TABLE xy_chat
ADD bodycontent_new nvarchar(max);


-- 如果新列确实存在,那么问题可能出在数据复制的步骤。让我们修改一下复制数据的SQL语句,添加一些错误处理:

BEGIN TRY
    UPDATE xy_chat
    SET bodycontent_new = CAST(bodycontent AS nvarchar(max));
    
    PRINT '数据复制成功';
END TRY
BEGIN CATCH
    PRINT '错误信息: ' + ERROR_MESSAGE();
END CATCH


 
-- 查找并删除依赖的约束
DECLARE @constraintName nvarchar(200)
SELECT @constraintName = name
FROM sys.default_constraints
WHERE parent_object_id = OBJECT_ID('xy_chat')
AND parent_column_id = (
    SELECT column_id 
    FROM sys.columns 
    WHERE object_id = OBJECT_ID('xy_chat')
    AND name = 'bodycontent'
)

IF @constraintName IS NOT NULL
BEGIN
    DECLARE @sql nvarchar(500)
    SET @sql = 'ALTER TABLE xy_chat DROP CONSTRAINT ' + @constraintName
    EXEC sp_executesql @sql
END

-- 步骤 3: 删除旧列
ALTER TABLE xy_chat
DROP COLUMN bodycontent;

-- 步骤 4: 重命名新列
EXEC sp_rename 'xy_chat.bodycontent_new', 'bodycontent', 'COLUMN';



                

winMoney的类型从原来的int改为money


-- 定义要修改的表名列表
DECLARE @tables TABLE (name NVARCHAR(128));
INSERT INTO @tables (name)
VALUES 
('xy_gameOrder'), ('xy_gameCCOrder');

-- 声明变量
DECLARE @tableName NVARCHAR(128);
DECLARE @constraintName NVARCHAR(128);
DECLARE @sql NVARCHAR(MAX);

-- 遍历每个表
DECLARE table_cursor CURSOR FOR 
SELECT name FROM @tables;

OPEN table_cursor;
FETCH NEXT FROM table_cursor INTO @tableName;

WHILE @@FETCH_STATUS = 0
BEGIN
    -- 查找依赖于 winMoney 列的默认约束
    SET @constraintName = NULL;
    SELECT @constraintName = name
    FROM sys.default_constraints
    WHERE parent_object_id = OBJECT_ID(@tableName)
      AND parent_column_id = (
          SELECT column_id 
          FROM sys.columns 
          WHERE object_id = OBJECT_ID(@tableName) AND name = 'winMoney'
      );

    -- 如果存在默认约束,则删除它
    IF @constraintName IS NOT NULL
    BEGIN
        SET @sql = N'ALTER TABLE ' + QUOTENAME(@tableName) + ' DROP CONSTRAINT ' + QUOTENAME(@constraintName);
        EXEC sp_executesql @sql;
        PRINT 'Dropped default constraint: ' + @constraintName + ' from table: ' + @tableName;
    END

    -- 修改列类型
    SET @sql = N'ALTER TABLE ' + QUOTENAME(@tableName) + ' ALTER COLUMN winMoney MONEY';
    EXEC sp_executesql @sql;
    PRINT 'Altered winMoney column to MONEY type in table: ' + @tableName;

    FETCH NEXT FROM table_cursor INTO @tableName;
END

CLOSE table_cursor;
DEALLOCATE table_cursor;

PRINT 'All specified tables have been updated successfully.';

sql语句
一些sqlserver里的sql语句

 
设置xy_Member的isHiddenVisit字段为0,条件是isHiddenVisit为null
UPDATE xy_Member  SET isHiddenVisit = 0  WHERE isHiddenVisit IS NULL;