SqlServerSQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。
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
双击软件 >> 安装 >> 全新安装 >> 确定(没报错) >> 勾选接受 >> 全部勾选,数据库引擎服务,SQL客户端,目录可换成D文件夹 >> 选择默认实例,实例根目录找D文件夹 >> 点击对所有SQL服务账户,账户名选择(NT AUTHORITY\SYSTEM),密码留空 >> 选择混合模式,输入密码sa123456,点击添加当前用户 >> 不勾选发送错误报告 >> 成功完成
sqlserver2014下载 选择
sqlserver2008下载 选择
安装
注意:sqlserver数据库安装好了,重启电脑,要不然网站在安装时无法连接sqlserver数据库
如果网站连接sqlserver数据库不成功,关闭防火墙
控制面板\所有控制面板项\管理工具\服务 里开启 SQL Server (MSSQLSERVER)
telnet localhost 1433 判断1433端口是否开启 查看1433端口是否开启
如果链接sqlserver数据库可以关闭防火墙 “ 控制面板\所有控制面板项\Windows 防火墙\自定义设置 ”
sqlserver配置管理器 >> SQL网络配置 >> MSSQLSERVER协议 >> 开启ICP/IP >> IP地址 >> 全部端口修改成1433
输入:SELECT @@VERSION >> 查看当前sqlserver数据库版本信息
SELECT SERVERPROPERTY('InstanceDefaultDataPath') AS DefaultDataPath,
SERVERPROPERTY('InstanceDefaultLogPath') AS DefaultLogPath; >> 查看sqlserver数据库目录
进入 Navicat for SQL Server >> 选择数据库 >> 选择左边Queries >> 点击右边 New Query >> 输入需要导入代码
exec sp_attach_db 'webdata','C:\soft\FNLAccount.mdf','C:\soft\FNLAccount_log.ldf'
>> 点击运行 >> 完成
注意:给*.mdf文件添加Everyone全部操作权限
导出sql数据库:
进入 >> Navicat for SQL Server >> 选中dbo >>转储SQL文件 >> 选择结构和数据
导入sql数据库:
进入 >> Navicat for SQL Server >> 选中数据库 >> 运行SQL文件
复制整个表
复制单个表
恢复表
关闭数据库,才可以恢复数据库
打开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创建数据库,第一步:右键 >> 选择创建数据库
navicat创建数据库,第二步:
数据库名:随便写
所有者:sa
排序规则:Chinese_PRC_CI_AS
恢复模式:FULL
兼容级别:80
navicat.exe 最新版连接数据库
出现这个报错,和解决方法
navicat收缩sqlserver日志
USE [xiyueta]
GO
DBCC SHRINKFILE (xiyueta_log, 5)
GO
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
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.';
一些sqlserver里的sql语句
设置xy_Member的isHiddenVisit字段为0,条件是isHiddenVisit为null
UPDATE xy_Member SET isHiddenVisit = 0 WHERE isHiddenVisit IS NULL;