• 2024年1月19日

Sql Server执行拼接Sql提示the name ” is not a valid identifier.

Sql Server在执行拼接出来的Sql语句时,会提示: the name ‘select …..’ is not a valid identifier. 例如: 提示: the name ‘select * from table1’ is not a valid identifier. 原因: exec 将@sql参数当作存储过程名称, 解决方法:给Sql加上括号即可

详细内容

Sql Server定义表参数及设定索引

DECLARE @t TABLE(id int identity(1,1) primary key –自增字段,主键,name NVARCHAR(50) default(N”) –普通字段,默认值为空,birthday datetime –日期字段,未设默认值,index i1 nonclustered (name) –索引,使用name作为非聚合索引) 写Sql存储过程时会用到table类型的参数,按照官方的意见是数据量100行以内可以使用这个,超过就建议使用临时表。 对于数据量多的,可以考虑给参数表增加个索引,定义方式如上。

详细内容

sql server参数空值判断 len/isnull/is not null/is null

存储过程中,对传入参数进行空值判断,经测试10次每次100万次isnull(@par,”)=”、@par is null、@par is not null 判断取平均值,结果如下: 测试代码如下: 本次测试是对传入参数null值判断效率,不代表sql语句中的判断效率。 在where条件中进行参数空判断,结果如下 测试代码如下:

详细内容

sql查询使用inner join出现重复数据问题

inner join 的表会把该表符合on条件的数据全部列出来与前面的表、inner join表数据形成多余的数据例如:select * from table1 t1inner join table2 t2 on t2.col1 = t1.col1 and t2.col2=t2.col2where t1. col3=’x’ 结果会出现单独查询 select * from table1 where col3=’x’ 只有1条记录但是因为table2存在100条 t2.col2=t1.col2 and t2.col1=t1.col1 导致上面的inner join语句执行完会出现100条记录

详细内容

添加数据到数据库时提示Duplicate entry ” for key ‘xxx’

开发.net core程序时通过sqlsugar添加数据到数据库时添加1条记录后,添加第二条提示 Duplicate entry ” for key ‘xxx’,而这个xxx并非对应数据表的字段,这是因为另外定义了名为xxx的索引,而且将索引设定为UNIQUE,导致添加第一条后,添加第二条索引字段出现重复值而被数据库提示错误。 解决方法旧是把这个索引修改为index就ok,当然了,如果这个索引确实需要唯一,那就要排查你添加数据的逻辑了。

详细内容

使用旧data文件夹恢复mysql数据库

有批旧mysql数据需要恢复,程序员只保留了原本的data目录,为了导出旧数据需要恢复data目录中的数据库。 操作流程: 1、安装与旧mysql同一个版本的mysql,注意:如果可以最好版本完全一致,其次是在同一个子版本,例如5.7 2、停掉新安装的mysql 3、备份新mysql的data目录中的文件,然后清空data下面所有内容 4、将旧mysql的data目录中的内容复制到新mysql的data目录下,并设定好相应的权限(比如宝塔mysql目录用户是mysql、权限755、640都有,自己看下data目录本身的权限) 5、启动mysql(如果第4步的权限没设定好,一般是无法启动的,看下日志,确认下错误原因) 6、通过phpmyadmin或者其他mysql连接工具使用旧的mysql的账户密码登录 如果忘记旧mysql的root密码,可以按照如下步骤: 1、在mysql配置文件中的[mysqld]节点加入 skip-grant-tables 2、重启mysql服务 3、使用控制台命令mysql -u root登录mysql 4、刷新权限flush privileges; 5、重设密码:set password for ‘root’@’localhost’=’123456′; 注意橘色部分,如果你的root是允许所有机器登录的,直接把橘色去掉,否则会提示找不到用户的错误

详细内容

SqlSugar的GetList时提示Operand should contain 1 column(s)

给魔码挪车小程序写webapi某个功能时,写了如下代码: return base.GetList(it=>ids.Length>0 && SqlFunc.ContainArray(ids,it.Id)) 报错:Operand should contain 1 column(s) 经百度,提示是in子查询时出现了2个字段(in (select id,true from [xxx] where ….)) 所以上面修改为: return base.GetList(it=> SqlFunc.ContainArray(ids,it.Id)) 问题解决

详细内容

.Net6后台用户权限控制模块开发方案

用户权限控制系统是B/S架构管理系统的关键模块,网上有多种方案,本文将分享一个相对比较简单的方案。 后台用户权限包含: 1、菜单权限: 1.1 菜单加载:后台加载菜单时,只加载分配给用户的菜单 1.2 页面加载:只能进入授权菜单对应的url页面 2、接口权限: 2.1 API调用权限:view页面只能调用授权api 基于此,我们将通过Microsoft.AspNetCore.Mvc.Filters的IAuthorizationFilter接口,配合Mysql数据库实现该方案。 数据库设计: 类型 备注 id 自增 username varchar(32) 用户名 password varchar(64) 密码 role_id int 用户表 类型 备注 id 自增 name varchar(32) 菜单名称 path varchar(100) view地址 菜单表 类型 备注 id 自增 name varchar(32) 组名称 menu_list text 菜单列表 api_list text 接口列表 用户组 类型 备注 id 自增 name varchar(32) 接口名称 path varchar(100) 接口地址 接口表 关键代码: 代码中涉及到数据库的读写就不详细写了,使用的是sqlsugar,各位根据自己情况修改下即可! 至此,基础的权限控制关键已完成,只需要编写相应的后台页面即可实现通过后台设定用户组的菜单权限、接口权限等。

详细内容

.Net Core读取Mysql数据库提示Unable to convert MySQL date/time value to System.DateTime

.Net Core连接Mysql时提示“Unable to convert MySQL date/time value to System.DateTime”错误,解决办法有3种: 1、将Mysql的date/datetime字段默认值设置为null 2、在连接字符串增加:Convert Zero Datetime=True ; Allow Zero Datetime=True 3、将date/datetime字段设置为varchar

详细内容

sqlite遇到no such table

.net core 开发用的sqlite数据库,发布后运行提示 No such table :xxxx,问了度娘才知道是因为data source路径错了,找不到数据库,修改为正确的路径即可! 之所以提示找不到数据表而不是提示找不到数据库是因为系统会自动创建一个sqlite数据库,所以是空库,没有表,自然找不到表了。

详细内容