- 可可科科
-
MySQL单列索引和组合索引的区别可能有很多人还不是十分的了解下面就为您分析两者的主要区别供您参考学习
为了形象地对比两者再建一个表
CREATE TABLE myIndex ( i_testID INT NOT NULL AUTO_INCREMENT vc_Name VARCHAR() NOT NULL vc_City VARCHAR() NOT NULL i_Age INT NOT NULLi_SchoolID INT NOT NULL PRIMARY KEY (i_testID) );
在这 条记录里面 上 下地分布了 条 vc_Name="erquan" 的记录只不过 cityageschool 的组合各不相同
来看这条 TSQLSELECT i_testID FROM myIndex WHERE vc_Name=erquanAND vc_City=郑州 AND i_Age=;
首先考虑建MySQL单列索引
在 vc_Name 列上建立了索引执行 TSQL 时MYSQL 很快将目标锁定在了 vc_Name=erquan 的 条记录上取出来放到一中间结果集在这个结果集里先排除掉 vc_City 不等于"郑州"的记录再排除 i_Age 不等于 的记录最后筛选出唯一的符合条件的记录
虽然在 vc_Name 上建立了索引查询时MYSQL不用扫描整张表效率有所提高但离我们的要求还有一定的距离同样的在 vc_City 和 i_Age 分别建立的MySQL单列索引的效率相似
为了进一步榨取 MySQL 的效率就要考虑建立组合索引就是将 vc_Namevc_Cityi_Age 建到一个索引里
ALTER TABLE myIndex ADD INDEX name_city_age (vc_Name()vc_Cityi_Age);
建表时vc_Name 长度为 这里为什么用 呢?因为一般情况下名字的长度不会超过 这样会加速索引查询速度还会减少索引文件的大小提高 INSERT 的更新速度
执行 TSQL 时MySQL 无须扫描任何记录就到找到唯一的记录!!
肯定有人要问了如果分别在 vc_Namevc_Cityi_Age 上建立单列索引让该表有 个单列索引查询时和上述的组合索引效率一样吗?大不一样远远低于我们的组合索引虽然此时有了三个索引但 MySQL 只能用到其中的那个它认为似乎是最有效率的单列索引
建立这样的组合索引其实是相当于分别建立了
vc_Namevc_Cityi_Age
vc_Namevc_City
vc_Name
这样的三个组合索引!为什么没有 vc_Cityi_Age 等这样的组合索引呢?这是因为 mysql 组合索引“最左前缀”的结果简单的理解就是只从最左面的开始组合并不是只要包含这三列的查询都会用到该组合索引下面的几个 TSQL 会用到
SELECT * FROM myIndex WHREE vc_Name="erquan" AND vc_City="郑州"
SELECT * FROM myIndex WHREE vc_Name="erquan"
而下面几个则不会用到
SELECT * FROM myIndex WHREE i_Age= AND vc_City="郑州"
SELECT * FROM myIndex WHREE vc_City="郑州"
转载,仅供参考。
相关推荐
TSQL和SQL区别?
两种概念不一样.sql是关系数据库的标准语言.而tsql(transact-sql)是标准sql的加强版,除了标准的sql命令外还对sql命令做了许多扩充.tsql语言主要由以下几部份组成:数据操作语言(dml)例:增删改查(insertdeleteupdateselect)数据控制语言(dcl)例:grantrevoke等数据定义语言(ddl)例:createdrop等除此之外,tsql还包括有变量,函数以及其他命令!2023-07-26 08:26:143
tsql的四个狭义操作
题主是否想询问“tsql的四个狭义操作是什么”?数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)、数据控制语言(DCL)。TSQL即Transact-SQL,是SQL在MicrosoftSQLServer上的增强版,是用来让应用程序与SQLServer沟通的主要语言,该语言的四个狭义操作为数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)、数据控制语言(DCL)。2023-07-26 08:26:221
天上麒麟成语解释
成语解释:称赞他人之子有文才。 成语出处:《南史 徐陵传》:“年数岁,家人携以候沙门释宝志,宝志摩其顶曰:‘天上石麒麟也。"” 成语繁体:天上麒麐 成语简拼:TSQL 成语注音:ㄊ一 ㄕㄤˋ ㄑ一ˊ 一ㄣˊ 常用程度:生僻成语 成语字数:四字成语 感情色彩:中性成语 成语用法:天上麒麟偏正式;作主语、宾语;指称人有文采的儿子。 成语结构:偏正式成语 成语年代:古代成语 近义词:天上石麟 成语例子:宋·范成大《次韵徐提举游石湖三绝》:“天上麒麟翰墨林,当家手笔擅文心。” 英语翻译:an outstanding son of a friend2023-07-26 08:26:281
tsql脚本保存为文本文件,文件名通常以什么结尾
以sql结尾sql脚本可以建数据库,建表,和数据操作,基本上你能在设计器里完成的,都可以用sql脚本完成1.数据库脚本,即用于创建数据库对象的语句的集合。Transact-SQL脚本保存为文件,文件名通常以 .sql结尾。具体使用环境包含:MY-SQL,SQLServer,oracle。数据库脚本包含:存储过程[Procedure],事务[transaction]等,索引[Index],触发器[Trigger],函数[Function]等。使用脚本的好处:可以提高数据访问的效率,并进行相关的数据处理。sqlserver 的是 .sql oracle 的是随便什么扩展名 sql脚本可以建数据库,建表,和数据操作,基本上你能在设计器里完成的,都可以用sql脚本完成2023-07-26 08:26:351
利用TSQL语句创建对表C_ Info 进行插入、修改和删除操作的3个存储过程?
就比如写一个存储过程对学生表进行你说的操作吧,Options是操作选项。CREATE PROCEDURE OperationData @Options Int,@学号 VarChar(10),@姓名 VarChar(8)ASBEGINIF Options=0 --选项参数值0执行删除操作DELECT 学生表 WHERE 学生表.学号=学号ELSE IF Options=1 --选项参数值为1则执行修改操作BEGINUPDATA 学生表SET 学生表.学号=学号SET 学生表.姓名=姓名WHERE 学生表.学号=学号ENDELSE IF Options=2INSERT INTO 学生表 VALUES(学号,姓名)END2023-07-26 08:26:451
TSQL和SQL区别?
SQL是个ANSI标准。各数据库厂商根据该标准开发自己的数据库及语言。Microsoft的SQL Server 用的叫T-SQL。ORACLE的叫PL/SQL。大写字母是关键字的推荐写法,自动生成的也都是大写。大多数数据库对于关键字的大小写不介意。所以你可以按照自己的习惯去写。============百度百科错了,你可以参考T-SQL词条:http://baike.baidu.com/view/1387454.html=================题主您提的词条我已经投诉并已经得到处理。2023-07-26 08:26:536
【求助】TSQL可以一句查询查多个表的行数吗?
select * from sysobjects where xtype = "U"%D%A%D%A查询数据库中所有用户表的信息2023-07-26 08:27:071
删除数据库使用的tsql语句是
DROPDATABASE。删除数据库是将已经存在的数据库从磁盘空间上清除,清除之后,数据库中的所有数据也将一同被删除,在TSQL中,当需要删除已创建的数据库时,可以使用DROPDATABASE语句。数据库系统是由数据库及其管理软件组成的系统。它是为适应数据处理的需要而发展起来的一种较为理想的数据处理的核心机构。2023-07-26 08:27:141
tsql问题 如何修改字段名
把原表删除,重建一个如果有数据的话,先备份,再插入新表中select * into t_test_bak from t_testgodrop table t_testgocreate table t_test(iii int)goinsert t_test select * from t_test_bakgodrop table t_test_bakgo2023-07-26 08:27:291
ACCESS数据库调用 字段是汉字
将代码修改为: <% dim tsql3,rs3 tsql="select * from lianjie where province="北京市" and city="北京市区"" set rs3=CreateObject("adodb.recordset") set rs3=conn.execute(tsql) %> 说明:要sql中字符串要用单引号(")括起来. 要是回答的内容有问题,或认为不妥,请发送百度消息给我,消息内容加上本页网址哦。。 ·2023-07-26 08:27:574
vb连接到sqlserer 数据库之后 ,查询语句该怎么写?
dim cn as adodb.connectiondim rs as adodb.recordsetdim tsql as stringset cn=new adodb.connectioncn.open "Driver={SQL Server};Server=Server_Name;Database=DB_Name;Uid=User_Name;Pwd=password"tsql="select * from table_name where ..."----------------"查询语句set rs=new adodb.recordsetrs.open tsql,cn,1,3if rs.recordcount>0 then...end ifset rs=nothingtsql="insert into table_name(field1,field2,...) values(val1,val2,...)"--------------"插入语句cn.execute tsql2023-07-26 08:28:043
仅允许指定的机器连接SQL Server服务器
问题 希望仅仅允许某个指定IP的计算机连接到SQL Server服务器 但不允许其他的客户端进行连接 解决方法如下 你可以直接在防火墙中做限制 只允许与指定的IP地址建立 的通讯 (注 从安全的角度来考虑 应该把 端口改成其他的端口 ) 其他的解决方法 一 限从指定IP接入的客户端: 如果使用SQL Server 还可以通过端点限制的方法来实现 此方法要求一块专门的网卡 所有可以连接SQL Server的客户端均通过此网卡接入(假设此网卡的IP是 ) 在 SQL Server 配置管理器 的 SQL Server 网络配置中 禁止除TCP/IP之外的所有协议; 使用如下的T SQL禁止默认的TCP端点 ALTER ENDPOINT [TSQL Default TCP] STATE = STOPPED 使用如下的T SQL建立新的TCP端点和授权 USE master GO 建立一个新的端点 CREATE ENDPOINT [TSQL User TCP] STATE = STARTED AS TCP( LISTENER_PORT = LISTENER_IP = ( ) 侦听的网络地址 ) FOR TSQL() GO 授予所有登录(或者指定登录)使用此端点的连接权限 GRANT CONNECT ON ENDPOINT::[TSQL User TCP] TO [public] 完成以上的配置之后 只有通过网络地址配置为 的网卡接入的客户端才能访问SQL Server;此外 假如只授予指定登录对端点的连接权限 则只有指定的登录才能接入SQL Server实例 二 限指定IP的客户端接入 当SQL Server 升级到SP 或者更高的版本的时候 你还可以通过新增的触发器来实现控制 执行一下的T SQL后 IP地址为 以外的客户端连接将会出现失败的现象 lishixinzhi/Article/program/SQLServer/201311/224272023-07-26 08:28:121
sql分割字符串查询,分组统计
首先掌握sql中分割字符串的方法:declare @sql varchar(2000),@tsql nvarchar(max),@split varchar(100) set @sql="1,3,5,6,8" --保存的字符 set @split=","--分隔符 select @tsql="select """+replace(@sql,@split,""" union all select """)+"""" exec(@tsql) ----完成之后将查询结果保存在一张临时表中。然后使用 select count(*) , 字段名 from 表名 group by 字段名 就可以得到您想要的结果了。 希望对您有所帮助!2023-07-26 08:28:211
用企业管理器和用TSQL语句创建数据库有什么区别?
没有什么区别,都能用。只是TSQL语句创建数据库在大型数据库中数据库比较多用,这样防止数据库丢失。2023-07-26 08:28:293
C# XML 操作(字体颜色、大小等)
可以用xml来控制,vs里面的智能感应也是这个原理 具体方法: 新建一个xml里面储存关键字 在keydown事件里面加搜索语句,如果里面有则显示为蓝色 !这里给出代码c# RichTextBox 使关键字变色 private void tSql_TextChanged(object sender, EventArgs e) { int index = this.tSql.SelectionStart; //记录修改的位置 this.tSql.SelectAll(); this.tSql.SelectionColor = Color.Black; //SQL关键字 //string[] keystr ={ "select ", "from ", "where ", " and ", " or ", // " order ", " by ", " desc ", " when ", " case ", // " then ", " end ", " on ", " in ", " is ", " else ", // " left ", " join ", " not ", " null " }; //C#关键字 string[] keystr = { "abstract ", "enum ", "long ", "stackalloc ", "as ", "event ", "namespace ", "static ", "base ", "explicit ", "new ", "string ", "bool ", "extern ", "null ", "struct ", "break ", "false ", "object ", "switch ", "byte ", "finally ", "operator ", "this ", "case ", "fixed ", "out ", "throw ", "catch ", "for ", "params ", "try ", "checked ", "foreach ", "private ", "typeof ", "class ", "goto ", "protected ", "uint ", "const ", "if ", "public ", "ulong ", "continue ", "implicit ", "readonly ", "unchecked ", "decimal ", "in ", "ref ", "unsafe ", "default ", "int ", "return ", "ushort ", "delegate ", "interface ", "sbyte ", "using ", "do ", "internal ", "sealed ", "virtual ", "double ", "is ", "short ", "void ", "else ", "lock ", "sizeof ", "while " }; for (int i = 0; i < keystr.Length; i++) this.getbunch(keystr[i], this.tSql.Text); this.tSql.Select(index, 0); //返回修改的位置 this.tSql.SelectionColor = Color.Black; } public int getbunch(string p, string s) //给关键字上色 { int cnt = 0; int M = p.Length; int N = s.Length; char[] ss = s.ToCharArray(), pp = p.ToCharArray(); if (M > N) return 0; for (int i = 0; i < N - M + 1; i++) { int j; for (j = 0; j < M; j++) { if (ss[i + j] != pp[j]) break; } if (j == p.Length) { this.tSql.Select(i, p.Length); this.tSql.SelectionColor = Color.Blue; cnt++; } } return cnt; }2023-07-26 08:28:373
asp 地址栏如何传递时间的参数????
应该是你时间连接串写法不符合语法吧select * from table where time between to_Date(20110901,"yyyymmdd") and to_date(20121001,"yyyymmdd")SQL:select * from table where time between ‘2011-9-1" and "2012-10-1" 以上是TIME列是日期格式的时候用,如果是字符格式,就简单些了.select * from table where time between "2011-9-1" and "2012-10-1"2023-07-26 08:28:442
C# 如何在窗体上用哪个控件可以显示大量的数字,而且通过当输入一个数字时,和它相同的数字以高亮显示
设置的是第一个字符的颜色,这时richtextBox的rtf中记录下位置0的颜色,重置text时,在rtf中的位置从位置0开始,因此颜色还是Color.Red,第三次也应该同样如此 richTextBox1.Text = "123"; richTextBox1.Select(0, 1); richTextBox1.SelectionColor = Color.Red; richTextBox1.Clear();//清除文本,包括样式 //或richTextBox1.Text=""; richTextBox1.Text = "abc"; richTextBox1.Text = "efg"; 这样重置后的文本颜色就会是黑色. 【关键字着色】 public partial class RichTextBox : Form { public RichTextBox() { InitializeComponent(); } private void tSql_TextChanged(object sender, EventArgs e) //文本框改变事件 { int index = this.tSql.SelectionStart; //记录修改的位置 this.tSql.SelectAll(); this.tSql.SelectionColor = Color.Black; string[] keystr ={ "select ", "from ", "where ", " and ", " or ", " order ", " by ", " desc ", " when ", " case ", " then ", " end ", " on ", " in ", " is ", " else ", " left ", " join ", " not ", " null " }; for (int i = 0; i < keystr.Length; i ) this.getbunch(keystr[i], this.tSql.Text); this.tSql.Select(index, 0); //返回修改的位置 this.tSql.SelectionColor = Color.Black; } public int getbunch(string p, string s) //给关键字上色 { int cnt = 0; int M = p.Length; int N = s.Length; char[] ss = s.ToCharArray(), pp = p.ToCharArray(); if (M > N) return 0; for (int i = 0; i < N - M 1; i ) { int j; for (j = 0; j < M; j ) { if (ss[i j] != pp[j]) break; } if (j == p.Length) { this.tSql.Select(i, p.Length); this.tSql.SelectionColor = Color.Blue; cnt ; } } return cnt; } }【绘制颜色提议】 最好的做法是继承RichTextBox,重载新类的Paint方法。 并且在设置SelectionLength的时候,禁止控件的重绘过程,这样才不会出现被语法高亮的文本有一个突然选中的过程。 以下2个方法将会对你解决这一问题有很大的帮助. [DllImport("user32")] private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, IntPtr lParam); private const int WM_SETREDRAW = 0xB; //停止控件的重绘 private void BeginPaint() { SendMessage(yourRichTextBox.Handle, WM_SETREDRAW, 0, IntPtr.Zero); } //允许控件重绘. private void EndPaint() { SendMessage(yourRichTextBox.Handle, WM_SETREDRAW, 1, IntPtr.Zero); yourRichTextBox.Refresh(); }2023-07-26 08:28:524
vb.net (2010) 连接access数据库及操作代码 (读取 写入 创建新表)【解决后再加50分】
由于 没有VS2010,只能简单写几句代码。用ODBC连接数据比较方便,你首先要引用system.data和system.data.odbcdim cn as odbcconnectioncn=new odbcconnection("driver={microsoft access driver (*.mdb)};uid=admin;pwd=;dbq=数据库路径数据库名.mdb")dim tsql as stringtsql="select username from [user]"dim od as odbcdataadapterdim ds as dataset=new datasetod=new odbcdataadapter(tsql,cn)od.fill(ds)listbox.items.clearfor i=0 to ds.tables(0).rows.count-1 listbox.items.add(ds.tables(0).rows(i),i)next i大概是这样的,希望能对你有所帮助。2023-07-26 08:29:011
linq to sql中怎样执行tsql
LINQ数据库实体对象.ExecuteCommand(“T-SQLTEXT”,paras[]); // 摘要: // 表示 LINQ to SQL 框架的主入口点。 public class DataContext : IDisposable{ // // 摘要: // 直接对数据库执行 SQL 命令。 // // 参数: // command: // 要执行的 SQL 命令。 // // parameters: // 要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果任一参数为 // null,则该参数会转换为 DBNull.Value。 // // 返回结果: // 一个 int,表示所执行命令修改的行数。 public int ExecuteCommand(string command, params object[] parameters);}2023-07-26 08:29:201
在VB中如何将SQL查询出来的结果输出到已经存在的ACCESS表中
不知道ACCESS支不支持这个语句,用Create Table ... As ... 例如:dim tsql as stringset con=new adodb.connectioncon.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID= sa;password=sa;Initial Catalog=uep;Data Source=127.0.0.1" tsql="create table tablename2 as (select * from tablename1 where ...)"cn.execute tsql...set con=nothing2023-07-26 08:29:284
php调用freeTDS查询SQL Server 2005 数据丢失问题
感觉empno相关索引问题,重建索引看看2023-07-26 08:29:361
asp 如何把一个表数据导入另一个表(表字段有些类型不同)
程序应该没有问题,可能是你数据类型转换的问题,字符串型转日期型用这个CDate(),数据类型不一样的情况下有些时候要做强制类型转换的2023-07-26 08:29:432
如何停止SQL dump日志生成
您好,很高兴为您解答。缺省情况下,在Program FilesMicrosoft SQL ServerMSSQLLog目录下。最近的错误日志名称是ERRORLOG,如果停止并重启SQL Server,旧的日志将被压缩和新建一个文件。此外,也可以通过DBCC ERRORLOG 命令或者sp_cycle_errorlog 系统存储过程回收错误日志。[@more@]以下是一些没有写在文档中但是众所周知的系统存储过程,这些存储过程可以从SQL Server自身读取错误日志。exec xp_enumerrorlogs 1 will list SQL Engine errorlog file numbersexec xp_readerrorlog <errorlognumber>, 1 will return the content of the requested Engine errorlog file.exec xp_enumerrorlogs 2 will list the Agent error log file numbersexec xp_readerrorlog <errorlognumber>, 2 will return the content of the requested Agent error log file.举例:exec xp_enumerrorlogs 2存档# 日期 日志文件大小(字节)1 08/06/2012 10:52 113991882 07/13/2012 00:58 10483 07/13/2012 00:55 10484 07/13/2012 00:55 126825085 06/16/2012 09:53 128692306 05/20/2012 05:38 104927 05/20/2012 05:25 117668 05/20/2012 05:08 100122789 04/29/2012 00:41 153711500 08/08/2012 11:30 939606exec xp_readerrorlog 1, 2时间 错误级别 内容2012-07-13 01:07:03.0 3 [393] 正在等待 SQL Server 恢复数据库...2012-07-13 01:18:29.0 3 [100] Microsoft SQLServerAgent 版本 9.00.1399.06 (内部版本号 x86 unicode 零售): 进程 ID 19962012-07-13 01:18:29.0 3 [101] SQL Server SVCTAG-4GCYY2X 版本 9.00.1399 (连接限制: 0)2012-07-13 01:18:29.0 3 [102] SQL Server ODBC 驱动程序版本 9.00.13992012-07-13 01:18:29.0 3 [103] 驱动程序使用的 NetLib 是 DBNETLIB.DLL;本地主机服务器是 2012-07-13 01:18:29.0 3 [310] 检测到 8 个处理器和 4096 MB RAM2012-07-13 01:18:29.0 3 [339] 本地计算机是 SVCTAG-4GCYY2X,运行的是 Windows NT 5.2 (3790) Service Pack 22012-07-13 01:18:29.0 3 [431] 正在填充子系统缓存...2012-07-13 01:18:36.0 3 [432] 子系统缓存中有 11 个子系统2012-07-13 01:18:36.0 3 [124] 已成功加载子系统“TSQL”(最大并发数: 160)2012-07-13 01:18:37.0 3 [124] 已成功加载子系统“ActiveScripting”(最大并发数: 80)2012-07-13 01:18:37.0 3 [124] 已成功加载子系统“CmdExec”(最大并发数: 80)2012-07-13 01:18:38.0 3 [124] 已成功加载子系统“Snapshot”(最大并发数: 800)2012-07-13 01:18:38.0 3 [124] 已成功加载子系统“LogReader”(最大并发数: 200)2023-07-26 08:29:521
sql server每天晚上11点自动执行存储过程
USE [msdb]GODECLARE @jobId BINARY(16)EXEC msdb.dbo.sp_add_job @job_name=N"job1",--job名称job1 @enabled=1, @notify_level_eventlog=0, @notify_level_email=2, @notify_level_netsend=2, @notify_level_page=2, @delete_level=0, @category_name=N"[Uncategorized (Local)]", @owner_login_name=N"sa", @job_id = @jobId OUTPUTselect @jobIdGOEXEC msdb.dbo.sp_add_jobserver @job_name=N"job1", @server_name = N"IEM-SERVER02SQL2005"--server_name服务器名称GOUSE [msdb]GOEXEC msdb.dbo.sp_add_jobstep @job_name=N"job1", @step_name=N"job1_1", @step_id=1, @cmdexec_success_code=0, @on_success_action=1, @on_fail_action=2, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N"TSQL", @command=N"select * from t_emp",--command要执行的命令 @database_name=N"HrmB", --在哪数据库 @flags=0GOUSE [msdb]GOEXEC msdb.dbo.sp_update_job @job_name=N"job1", @enabled=1, @start_step_id=1, @notify_level_eventlog=0, @notify_level_email=2, @notify_level_netsend=2, @notify_level_page=2, @delete_level=0, @description=N"", @category_name=N"[Uncategorized (Local)]", @owner_login_name=N"sa", @notify_email_operator_name=N"", @notify_netsend_operator_name=N"", @notify_page_operator_name=N""GOUSE [msdb]GODECLARE @schedule_id intEXEC msdb.dbo.sp_add_jobschedule @job_name=N"job1", @name=N"sch1", @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=1, @freq_subday_interval=0, @freq_relative_interval=0, @freq_recurrence_factor=1, @active_start_date=20090313, @active_end_date=99991231, --结束时间,即以后不再执行 @active_start_time=110000, --每天执行的时间 @active_end_time=235959, @schedule_id = @schedule_id OUTPUTselect @schedule_idGO2023-07-26 08:30:016
vs执行tsql里的print语句看不到输出结果
vs执行tsql里的print语句看不到输出结果是没有赋值。将变量赋值即可。MicrosoftVisualStudio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台。2023-07-26 08:30:151
SQL高手高手请进,SQL高手有问题
---*/ /**//*--调用示例 p_exporttb @tbname="地区资料",@path="c:",@fname="aa.xls" --*/ if exists (select * from dbo.sysobjects where id = object_id(N"[dbo].[p_exporttb]") and OBJECTPROPERTY(id, N"IsProcedure") = 1) drop procedure [dbo].[p_exporttb] GO create proc p_exporttb @tbname sysname, --要导出的表名,注意只能是表名/视图名 @path nvarchar(1000), --文件存放目录 @fname nvarchar(250)="" --文件名,默认为表名 as declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000) --参数检测 if isnull(@fname,"")="" set @fname=@tbname+".xls" --检查文件是否已经存在 if right(@path,1)<>"" set @path=@path+"" create table #tb(a bit,b bit,c bit) set @sql=@path+@fname insert into #tb exec master..xp_fileexist @sql --数据库创建语句 set @sql=@path+@fname if exists(select 1 from #tb where a=1) set @constr="DRIVER={Microsoft Excel Driver (*.xls)};DSN="""";READONLY=FALSE" +";CREATE_DB=""+@sql+"";DBQ="+@sql else set @constr="Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 5.0;HDR=YES" +";DATABASE="+@sql+""" --连接数据库 exec @err=sp_oacreate "adodb.connection",@obj out if @err<>0 goto lberr exec @err=sp_oamethod @obj,"open",null,@constr if @err<>0 goto lberr --创建表的SQL select @sql="",@fdlist="" select @fdlist=@fdlist+","+a.name ,@sql=@sql+",["+a.name+"] " +case when b.name in("char","nchar","varchar","nvarchar") then "text("+cast(case when a.length>255 then 255 else a.length end as varchar)+")" when b.name in("tynyint","int","bigint","tinyint") then "int" when b.name in("smalldatetime","datetime") then "datetime" when b.name in("money","smallmoney") then "money" else b.name end FROM syscolumns a left join systypes b on a.xtype=b.xusertype where b.name not in ("image","text","uniqueidentifier","sql_variant","ntext","varbinary","binary","timestamp") and object_id(@tbname)=id select @sql="create table ["+@tbname +"]("+substring(@sql,2,8000)+")" ,@fdlist=substring(@fdlist,2,8000) exec @err=sp_oamethod @obj,"execute",@out out,@sql if @err<>0 goto lberr exec @err=sp_oadestroy @obj --导入数据 set @sql="openrowset(""MICROSOFT.JET.OLEDB.4.0"",""Excel 5.0;HDR=YES ;DATABASE="+@path+@fname+""",["+@tbname+"$])" exec("insert into "+@sql+"("+@fdlist+") select "+@fdlist+" from "+@tbname) return lberr: exec sp_oageterrorinfo 0,@src out,@desc out lbexit: select cast(@err as varbinary(4)) as 错误号 ,@src as 错误源,@desc as 错误描述 select @sql,@constr,@fdlist go *--数据导出EXCEL 导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件 ,如果文件不存在,将自动创建文件 ,如果表不存在,将自动创建表 基于通用性考虑,仅支持导出标准数据类型 --*/ /**//*--调用示例 p_exporttb @sqlstr="select * from 地区资料" ,@path="c:",@fname="aa.xls",@sheetname="地区资料" --*/ if exists (select * from dbo.sysobjects where id = object_id(N"[dbo].[p_exporttb]") and OBJECTPROPERTY(id, N"IsProcedure") = 1) drop procedure [dbo].[p_exporttb] GO create proc p_exporttb @sqlstr sysname, --查询语句,如果查询语句中使用了order by ,请加上top 100 percent,注意,如果导 出表/视图,用上面的存储过程 @path nvarchar(1000), --文件存放目录 @fname nvarchar(250), --文件名 @sheetname varchar(250)="" --要创建的工作表名,默认为文件名 as declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000) --参数检测 if isnull(@fname,"")="" set @fname="temp.xls" if isnull(@sheetname,"")="" set @sheetname=replace(@fname,".","#") --检查文件是否已经存在 if right(@path,1)<>"" set @path=@path+"" create table #tb(a bit,b bit,c bit) set @sql=@path+@fname insert into #tb exec master..xp_fileexist @sql --数据库创建语句 set @sql=@path+@fname if exists(select 1 from #tb where a=1) set @constr="DRIVER={Microsoft Excel Driver (*.xls)};DSN="""";READONLY=FALSE" +";CREATE_DB=""+@sql+"";DBQ="+@sql else set @constr="Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 5.0;HDR=YES" +";DATABASE="+@sql+""" --连接数据库 exec @err=sp_oacreate "adodb.connection",@obj out if @err<>0 goto lberr exec @err=sp_oamethod @obj,"open",null,@constr if @err<>0 goto lberr --创建表的SQL declare @tbname sysname set @tbname="##tmp_"+convert(varchar(38),newid()) set @sql="select * into ["+@tbname+"] from("+@sqlstr+") a" exec(@sql) select @sql="",@fdlist="" select @fdlist=@fdlist+","+a.name ,@sql=@sql+",["+a.name+"] " +case when b.name in("char","nchar","varchar","nvarchar") then "text("+cast(case when a.length>255 then 255 else a.length end as varchar)+")" when b.name in("tynyint","int","bigint","tinyint") then "int" when b.name in("smalldatetime","datetime") then "datetime" when b.name in("money","smallmoney") then "money" else b.name end FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype where b.name not in ("image","text","uniqueidentifier","sql_variant","ntext","varbinary","binary","timestamp") and a.id=(select id from tempdb..sysobjects where name=@tbname) select @sql="create table ["+@sheetname +"]("+substring(@sql,2,8000)+")" ,@fdlist=substring(@fdlist,2,8000) exec @err=sp_oamethod @obj,"execute",@out out,@sql if @err<>0 goto lberr exec @err=sp_oadestroy @obj --导入数据 set @sql="openrowset(""MICROSOFT.JET.OLEDB.4.0"",""Excel 5.0;HDR=YES ;DATABASE="+@path+@fname+""",["+@sheetname+"$])" exec("insert into "+@sql+"("+@fdlist+") select "+@fdlist+" from ["+@tbname+"]") set @sql="drop table ["+@tbname+"]" exec(@sql) return lberr: exec sp_oageterrorinfo 0,@src out,@desc out lbexit: select cast(@err as varbinary(4)) as 错误号 ,@src as 错误源,@desc as 错误描述 select @sql,@constr,@fdlist go使用SSIS(SQL SERVER 2005)或者DTS(2000)调用,并设置好运行时间2023-07-26 08:30:3614
往mysql test库t表插入一百万记录 如何用tsql 或存储过程编写 把代码写出 不要复制的
行数把100改成你想要的就可以了,或者定义成存储过程的参数:CREATE TABLE batch_instbl( COLA CHAR(6), COLB CHAR(6), COLC INT);delimiter $ create procedure batch_insert()begindeclare i decimal (10) default 0 ;while i<>100 doINSERT INTO `batch_instbl` (`COLA`, `COLB`,COLC)VALUES (RAND()*123456789, RAND()*987654321, 100*RAND());set i = i+1;end while;commit;end;$delimiter ;call batch_insert();2023-07-26 08:30:582
怎么用tsql语言表示如果一个变量为整数
12int carc = 1000; /* 随便等于一个值 */sprintf (sql, "update car set carcount=%d where ID=1", carc);不过你是C++,如果是string类型,直接字符串加,做成流,方法太多了2023-07-26 08:31:181
asp 写sql嵌套查询的写法
个人理解: 在ttt表中查找 字段 zymcjc 中 某一满足要求的记录,然后根据查找到的zymcjc字段中的 内容 + bjh ,再在数据表 sss 中 字段 bjmc 中 检索. 在ttt表中检索的内容记录可能不止一条,常规下,这两个检索用一条语句即可完成。 从你的代码上看 bjh 是已知的, select * from sss where bjmc in ( select zymcjc +"已知数据" from ttt where zymcjc=" 所给数据")如果bjh 是ttt 的一个字段,也是同样操作, select * from sss where bjmc in ( select zymcjc + right(bjh,2)+"1" from ttt where zymcjc="所给数据")不知我解释的是否合理,只是根据你的问题进行描述.2023-07-26 08:31:274
VB用LISTBOX列出数据库的所有表名
连数据库会了吧?连上后用下面的语句写。tsql = "select name from sysobjects where type="U""rs.Open tsql, cn, 1, 1 Do Until rs.EOF list1.AddItem rs.Fields("name") rs.MoveNext Loop2023-07-26 08:32:205
SQL Server 里需要定时执行某个存储过程,存储过程怎么写?
createprocedurepro_testasdeclare@timedatetime,@idint,@difftimeintdeclarecursor_timecursorforselectid,timefromtest_table-----(yourtable_name)opencursor_timefetchcursor_timeinto@id,@timebeginwhile@@fetch_status=0beginselect@difftime=DateDiff(dd,@time,getdate())if@difftime>0and@difftime<=30beginupdatetest_tablesetmoney3=money1*0.3,money4=(money1*0.3-money2)whereid=@idendif@difftime>30and@difftime<=60beginupdatetest_tablesetmoney3=money1*0.6,money4=(money1*0.6-money2)whereid=@idendif@difftime>60and@difftime<=365beginupdatetest_tablesetmoney3=money1*0.9,money4=(money1*0.9-money2)whereid=@idendif@difftime>365beginupdatetest_tablesetmoney3=money1,money4=(money1-money2)whereid=@idendendend把存储过程里的表明改成你的table创建好这个存储过程后,然后在企业管理器里,展开“管理”-“sqlserver代理”-“作业”新建一个作业。在“步骤”里选择你要执行的库,然后在代码栏写上‘execpro_test",“调度”里设置下时间,就可以了。不明白的地方hi我。2023-07-26 08:32:377
SQL中如何使用T-SQL语句修改表的名称?
sp_rename更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。语法sp_rename[@objname=]"object_name",[@newname=]"new_name"[,[@objtype=]"object_type"]参数[@objname=]"object_name"是用户对象(表、视图、列、存储过程、触发器、默认值、数据库、对象或规则)或数据类型的当前名称。如果要重命名的对象是表中的一列,那么object_name必须为table.column形式。如果要重命名的是索引,那么object_name必须为table.index形式。object_name为nvarchar(776)类型,无默认值。[@newname=]"new_name"是指定对象的新名称。new_name必须是名称的一部分,并且要遵循标识符的规则。newname是sysname类型,无默认值。[@objtype=]"object_type"是要重命名的对象的类型。object_type为varchar(13)类型,其默认值为NULL,可取下列值。值描述COLUMN要重命名的列。DATABASE用户定义的数据库。要重命名数据库时需用此选项。INDEX用户定义的索引。OBJECT在sysobjects中跟踪的类型的项目。例如,OBJECT可用来重命名约束(CHECK、FOREIGNKEY、PRIMARY/UNIQUEKEY)、用户表、视图、存储过程、触发器和规则等对象。USERDATATYPE通过执行sp_addtype而添加的用户定义数据类型。返回代码值0(成功)或非零数字(失败)注释只能更改当前数据库中的对象名称或数据类型名称。大多数系统数据类型和系统对象的名称不能更改。重命名视图时,sysobjects表中有关该视图的信息将得到更新。重命名存储过程时,sysobjects表中有关该过程的信息将得到更新。每当重命名PRIMARYKEY或UNIQUE约束时,sp_rename都会自动为相关联的索引重命名。如果重命名的索引与PRIMARYKEY约束相关联,那么sp_rename也会自动重命名主键。重要重命名存储过程和视图后,请清空过程高速缓存以确保所有相关的存储过程和视图都重新编译。由于存储过程和视图都不存储数据,所以这两种对象均可快速删除和重建。重命名文本对象时,要获得最佳结果,应删除并使用其新名称重新创建对象。权限sysadmin固定服务器角色成员、db_owner和db_ddladmin固定数据库角色成员或对象所有者可以执行sp_rename。只有sysadmin和dbcreator固定服务器角色成员才能将"database"作为object_type来执行sp_rename。示例A.重命名表下例将表customers重命名为custs。EXECsp_rename"customers","custs"B.重命名列下例将表customers中的列contacttitle重命名为title。EXECsp_rename"customers.[contacttitle]","title","COLUMN"2023-07-26 08:32:531
本地sql数据库怎么与远程sql数据库同步
MySQL数据同步主要有三种方式: 1.利用MySQL自身的数据库同步功能 2.利用MySQL数据库的特性(数据库存在固顶目录,并且以文件形式存储),进行数据库目录同步以达到数据同步目的 3.利用专用的MySQL数据库同步软件 1.利用MySQL自身的数据库同步功能: MySQL从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能. 数据库同步复制功能的设置都在mysql的设置文件中体现。mysql的配置文件(一般是my.cnf),在unix环境下在/etc/mysql/my.cnf或者在mysql用户的home目录下的my.cnf。 windows环境中,如果c:根目录下有my.cnf文件则取该配置文件。当运行mysql的winmysqladmin.exe工具时候,该工具会把c:根目录下的my.cnf命名为mycnf.bak。并在winnt目录下创建my.ini。mysql服务器启动时候会读该配置文件。所以可以把my.cnf中的内容拷贝到my.ini文件中,用my.ini文件作为mysql服务器的配置文件。 设置方法: 设置范例环境: 操作系统:window2000professional mysql:4.0.4-beta-max-nt-log Aip:10.10.10.22 Bip:10.10.10.53 A:设置 1.增加一个用户最为同步的用户帐号: GRANTFILEON*.*TObackup@"10.10.10.53"IDENTIFIEDBY‘1234" 2.增加一个数据库作为同步数据库: createdatabasebackup B:设置 1.增加一个用户最为同步的用户帐号: GRANTFILEON*.*TObackup@"10.10.10.22"IDENTIFIEDBY‘1234" 2.增加一个数据库作为同步数据库: createdatabasebackup 主从模式:A->B A为master 修改Amysql的my.ini文件。在mysqld配置项中加入下面配置: server-id=1 log-bin #设置需要记录log可以设置log-bin=c:mysqlbakmysqllog设置日志文件的目录, #其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。 binlog-do-db=backup#指定需要日志的数据库 重起数据库服务。 用showmasterstatus命令看日志情况。 B为slave 修改Bmysql的my.ini文件。在mysqld配置项中加入下面配置: server-id=2 master-host=10.10.10.22 master-user=backup#同步用户帐号 master-password=1234 master-port=3306 master-connect-retry=60预设重试间隔60秒 replicate-do-db=backup告诉slave只做backup数据库的更新 重起数据库 用showslavestatus看同步配置情况。 注意:由于设置了slave的配置信息,mysql在数据库目录下生成master.info 所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。 双机互备模式。 如果在A加入slave设置,在B加入master设置,则可以做B->A的同步。 在A的配置文件中mysqld配置项加入以下设置: master-host=10.10.10.53 master-user=backup master-password=1234 replicate-do-db=backup master-connect-retry=10 在B的配置文件中mysqld配置项加入以下设置: log-bin=c:mysqllogmysqllog binlog-do-db=backup 注意:当有错误产生时*.err日志文件。同步的线程退出,当纠正错误后要让同步机制进行工作,运行slavestart 重起AB机器,则可以实现双向的热备。 测试: 向B批量插入大数据量表AA(1872000)条 A数据库每秒钟可以更新2500条数据。 2.数据库目录同步: 方法和文件同步一样,设置好需要同步的两个数据库目录就可以了! 缺点很明显,数据同步只能单向进行,可以作为备份方案 3.用专用的MySQL同步软件进行同步 : 这方面的软件有SQLBalance和MyReplicator,优点是方便直观,还有很多争强功能! 缺点和2一样,只能单项同步! 当然也可以修改镜像网站的程序为提交数据到母数据库,读取则在当前镜像下的数据,不过,修改起来麻烦!普通用户修改也非常难!呵呵,大家了解一下就可以!给大家一个思路!有能力的朋友可以试试阿! 4.关于MySQL论坛的数据同步 由于数据来源的不可控制(不好表达),论坛数据是实时的,而且还要考虑来自镜像论坛的数据,如何实现镜像论坛与母论坛数据同步呢? 用1中介绍的MySQL自带的数据库同步功能互相备份模式就可以实现的! 不过,具体的应用我没有测试!稳定性不敢保证! 有能力的朋友推荐用下面这种思路来同步,相对来说减少点效率,但能减少发生的错误! 比如镜像论坛数据同步: 1.母论坛和镜像论坛的数据全写在母论坛数据库里,主从模式,读取只在本地读取,这个需要修改程序! 2.每次写数据,都同时提交到两个数据库中,安全,但是效率很差,也得修改程序! MSSQL MSSQL数据同步利用数据库复制技术实现数据同步更新(来自网络,也是非常完美的教程) 复制的概念 : 复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。 SQL复制的基本元素包括 出版服务器、订阅服务器、分发服务器、出版物、文章 SQL复制的工作原理 SQLSERVER主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器 SQLSERVER复制技术类型 SQLSERVER提供了三种复制技术,分别是: 1、快照复制(呆会我们就使用这个) 2、事务复制 3、合并复制 只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。 第一先来配置出版服务器 (1)选中指定[服务器]节点 (2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令 (3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。 (4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution) 第二创建出版物 (1)选中指定的服务器 (2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框 (3)选择要创建出版物的数据库,然后单击[创建发布] (4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助) (5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQLSERVER2000"的数据库服务器 (6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表 (7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。 第三设计订阅 (1)选中指定的订阅服务器 (2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅] (3)按照单击[下一步]操作直到系统会提示检查SQLSERVER代理服务的运行状态,执行复制操作的前提条件是SQLSERVER代理服务必须已经启动。 (4)单击[完成]。完成订阅操作。 完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开 C:/ProgramFiles/MicrosoftSQLServer/MSSQL/REPLDATA/unc/XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表— 一个手工同步的方案 --定时同步服务器上的数据 --例子: --测试环境,SQLServer2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test --服务器上的表(查询分析器连接到服务器上创建) createtable[user](idintprimarykey,numbervarchar(4),namevarchar(10)) --以下在局域网(本机操作) --本机的表,state说明:null表示新增记录,1表示修改过的记录,0表示无变化的记录 ifexists(select*fromdbo.sysobjectswhereid=object_id(N"[user]")andOBJECTPROPERTY(id,N"IsUserTable")=1) droptable[user] GO createtable[user] (idintidentity(1,1),numbervarchar(4),namevarchar(10),statebit) go --创建触发器,维护state字段的值 createtriggert_stateon[user] afterupdate as update[user]setstate=1 from[user]ajoininsertedbona.id=b.id wherea.stateisnotnull go --为了方便同步处理,创建链接服务器到要同步的服务器 --这里的远程服务器名为:xz,用户名为:sa,无密码 ifexists(select1frommaster..sysserverswheresrvname="srv_lnk") execsp_dropserver"srv_lnk","droplogins" go execsp_addlinkedserver"srv_lnk","","SQLOLEDB","xz" execsp_addlinkedsrvlogin"srv_lnk","false",null,"sa" go --创建同步处理的存储过程 ifexists(select*fromdbo.sysobjectswhereid=object_id(N"[dbo]. [p_synchro]")andOBJECTPROPERTY(id,N"IsProcedure")=1) dropprocedure[dbo].[p_synchro] GO createprocp_synchro as --setXACT_ABORTon --启动远程服务器的MSDTC服务 execmaster..xp_cmdshell"isql/S"xz"/U"sa"/P""/q"execmaster..xp_cmdshell""netstartmsdtc"",no_output"",no_output --启动本机的MSDTC服务 --execmaster..xp_cmdshell"netstartmsdtc",no_output --进行分布事务处理,如果表用标识列做主键,用下面的方法 --BEGINDISTRIBUTEDTRANSACTION --同步删除的数据 deletefromsrv_lnk.test.dbo.[user] whereidnotin(selectidfrom[user]) --同步新增的数据 insertintosrv_lnk.test.dbo.[user] selectid,number,namefrom[user]wherestateisnull --同步修改的数据 updatesrv_lnk.test.dbo.[user]set number=b.number,name=b.name fromsrv_lnk.test.dbo.[user]a join[user]bona.id=b.id whereb.state=1 --同步后更新本机的标志 update[user]setstate=0whereisnull(state,1)=1 --COMMITTRAN go --创建作业,定时执行数据同步的存储过程 ifexists(SELECT1frommsdb..sysjobswherename="数据处理") EXECUTEmsdb.dbo.sp_delete_job@job_name="数据处理" execmsdb..sp_add_job@job_name="数据处理" --创建作业步骤 declare@sqlvarchar(800),@dbnamevarchar(250) select@sql="execp_synchro"--数据处理的命令 @dbname=db_name()--执行数据处理的数据库名 execmsdb..sp_add_jobstep@job_name="数据处理", @step_name="数据同步", @subsystem="TSQL", @database_name=@dbname, @command=@sql, @retry_attempts=5,--重试次数 @retry_interval=5--重试间隔 --创建调度 EXECmsdb..sp_add_jobschedule@job_name="数据处理", @name="时间安排", @freq_type=4,--每天 @freq_interval=1,--每天执行一次 @active_start_time=00000--0点执行2023-07-26 08:33:032
如何用sql命令获取ip地址
在一些需求中,可能我们需要知道连接到SqlServer的前端程序的一些系统信息,比如前端连接的计算机名称,IP地址,什么时候开始请求连接,什么时候结束连接等信息。如果你对SqlServer的系统函数或视图不太了解,这个功能看起来好像比较复杂,而实际上, SqlServer的动态管理视图已经给我们提供了这些信息,下面我们来看两个动态管理视图。1、Sys.dm_exec_Sessions 这个视图中提供了所有连接sqlserver的客户端的一些信息,下面是Sys.dm_exec_Sessions返回的列:列名数据类型 说明Session_idsmallint标识与每个活动主连接关联的会话。login_timedatetime建立会话的时间。host_namenvarchar(128)与会话关联的主机。program_namenvarchar(128)与会话关联的程序。host_process_idint与会话关联的进程 ID。client_versionint客户端连接到服务器所用的接口版本。client_interface_namenvarchar(32)客户端连接到服务器所用的接口名称。security_idvarbinary(85)与登录名关联的 Microsoft Windows 安全 ID。login_namenvarchar(128)与会话关联的 SQL 登录名。nt_domainnvarchar(128)从中建立会话连接的域。nt_user_namenvarchar(128)与会话关联的用户名。statusnvarchar(30)会话的状态。可能的值: 1,运行 - 当前正在运行一个或多个请求2,睡眠 - 当前没有运行任何请求3,休眠 - 会话处于登录前状态context_infovarbinary(128)会话的 CONTEXT_INFO 值。cpu_timeint该会话所占用的 CPU 时间(毫秒)。memory_usageint该会话所占用的 8 KB 内存页数。total_scheduled_timeint计划内含请求的会话的执行所耗用的总计时间(毫秒)。total_elapsed_timeint自会话建立以来已耗用的时间(毫秒)。endpoint_idint与会话关联的端点的 ID。last_request_start_timedatetime最近一次会话请求的开始时间。这包括当前正在执行的请求。last_request_end_timedatetime最近一次会话请求的完成时间。readsbigint在该会话期间该会话中的请求所执行的读取次数。Writesbigint在该会话期间该会话中的请求所执行的写入次数。logical_readsbigint已对该会话执行的逻辑读取数。is_user_processbit如果会话是系统会话,则为 0。否则,为 1。text_sizeint会话的 TEXTSIZE 设置。languagenvarchar(128)会话的 LANGUAGE 设置。date_formatnvarchar(3)会话的 DATEFORMAT 设置。date_firstsmallint会话的 DATEFIRST 设置。quoted_identifierbit会话的 QUOTED_IDENTIFIER 设置。arithabortbit会话的 ARITHABORT 设置。ansi_null_dflt_onbit会话的 ANSI_NULL_DFLT_ON 设置。ansi_defaultsbit会话的 ANSI_DEFAULTS 设置。ansi_warningsbit会话的 ANSI_WARNINGS 设置。ansi_paddingbit会话的 ANSI_PADDING 设置。ansi_nullsbit会话的 ANSI_NULLS 设置。concat_null_yields_nullbit会话的 CONCAT_NULL_YIELDS_NULL 设置。transaction_isolation_levelsmallint会话的事务隔离级别。 0 = 未指定 1 = 未提交读取 2 = 已提交读取 3 = 可重复 4 = 可序列化 5 = 快照lock_timeoutint会话的 LOCK_TIMEOUT 设置。该值以毫秒计。deadlock_priorityint会话的 DEADLOCK_PRIORITY 设置。row_countbigint到目前为止会话返回的行数。prev_errorint会话返回的最近一个错误的 ID。比如说,我们要看那些主机有连接到了sqlserver服务器,可以使用下面的sql语句:select distinct host_name from sys.dm_exec_Sessions要看那些用户已连接到sqlserver服务器:select distinct login_name from sys.dm_exec_Sessions当然,利用上面的列,我们可以获得更多想要的客户端信息2、Sys.dm_exec_connections 这个视图返回了连接sqlserver服务器上面的每个连接的详细信息,下面是Sys.dm_exec_connections返回的列:列名数据类型 说明Session_idint标识与此连接关联的会话。most_recent_Session_idint显示与此连接关联的最近请求的会话 ID。connect_timedatetime连接建立时的时间戳。net_transportnvarchar(40)说明该连接使用的物理传输协议。protocol_typenvarchar(40)指定负载的协议类型。此参数当前可区分 TDS (TSQL) 和 SOAP。protocol_versionint与此连接关联的数据访问协议的版本。endpoint_idint与此连接关联的端点的唯一标识符。此 endpoint_id 可用于查询 sys.endpoints 视图。encrypt_optionnvarchar(40)说明是否为此连接启用了加密的布尔值。auth_schemenvarchar(40)指定与此连接一起使用的 SQL Server/NT 身份验证。node_affinitysmallint显示与此连接关联的 SOS 节点。num_readsint此连接中已发生的读包次数。num_writesint此连接中已发生的写数据包次数。last_readdatetime此连接中上一次发生读操作的时间戳。last_writedatetime此连接中上一次发生写操作的时间戳。net_packet_sizeint用于信息和数据的网络包的大小。client_net_addressvarchar(40)与此服务器连接的客户端的主机地址。client_tcp_portint与该连接关联的客户机上的端口号。local_net_addressvarchar(40)显示此连接的目标服务器的 IP 地址。只对使用 TCP 传输提供程序的连接可用。local_tcp_portint如果此连接使用 TCP 传输,则显示该连接的目标服务器的 TCP 端口。connection_iduniqueidentifier对每个连接进行唯一标识。parent_connection_iduniqueidentifier标识MARS 会话正在使用的主要连接。most_recent_sql_handlevarbinary(64)此连接上执行的上一个请求的 SQL 句柄。most_recent_sql_handle 列始终与 most_recent_Session_id 列同步。比如,我要查看当前连接的客户端IP与sqlserver所在服务器的IP,可以用下面的sql查询:select client_net_address "客户端IP",local_net_address "服务器的IP" from sys.dm_exec_connections where Session_id=@@spid@@spid的作用是返回当前进程的会话ID。2023-07-26 08:33:131
ORACLE 和 SQL区别?
所有的关系型数据库都支持 SQL 命令 也像你说的那样 在支持SQL语句的同时 也拥有自己的一套语言规范 只是实现方式大同小异 至于SqlServer 和Oracle 的区别在于:一、开放性 1. SQL Server 只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据库。 2. Oracle 能在所有主流平台上运行(包括 windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。 二、可伸缩性,并行性 1. SQL server 并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。 2. Oracle 并行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。如果windowsNT不能满足需要,用户可以把数据库移到UNIX中。Oracle的并行服务器对各种UNIX平台的集群机制都有着相当高的集成度。三、性能 1. SQL Server 多用户时性能不佳 2. Oracle 性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录。 四、客户端支持及应用模式 1. SQL Server C/S结构,只支持windows客户,可以用ADO、DAO、OLEDB、ODBC连接。 2. Oracle 多层次网络计算,支持多种工业标准,可以用ODBC、JDBC、OCI等网络客户连接。 五、操作简便 1. SQL Server 操作简单,但只有图形界面。 2. Oracle 较复杂,同时提供GUI和命令行,在windowsNT和unix下操作相同。 六、使用风险 1. SQL server 完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容。 2. Oracle 长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。 最后价格上 ORACLE贵过SQLSRVER2023-07-26 08:33:2310
本地sql数据库怎么与远程sql数据库同步?
MySQL MySQL数据同步主要有三种方式: 1.利用MySQL自身的数据库同步功能 2.利用MySQL数据库的特性(数据库存在固顶目录,并且以文件形式存储),进行数据库目录同步以达到数据同步目的 3.利用专用的MySQL数据库同步软件 1.利用MySQL自身的数据库同步功能(下面参考自网上的文章,写的非常详细了) MySQL从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能. 数据库同步复制功能的设置都在mysql的设置文件中体现。mysql的配置文件(一般是my.cnf),在unix环境下在/etc/mysql/my.cnf或者在mysql用户的home目录下的my.cnf。 windows环境中,如果c:根目录下有my.cnf文件则取该配置文件。当运行mysql的winmysqladmin.exe工具时候,该工具会把c:根目录下的my.cnf命名为mycnf.bak。并在winnt目录下创建my.ini。mysql服务器启动时候会读该配置文件。所以可以把my.cnf中的内容拷贝到my.ini文件中,用my.ini文件作为mysql服务器的配置文件。 设置方法: 设置范例环境: 操作系统:window2000professional mysql:4.0.4-beta-max-nt-log Aip:10.10.10.22 Bip:10.10.10.53 A:设置 1.增加一个用户最为同步的用户帐号: GRANTFILEON*.*TObackup@"10.10.10.53"IDENTIFIEDBY‘1234" 2.增加一个数据库作为同步数据库: createdatabasebackup B:设置 1.增加一个用户最为同步的用户帐号: GRANTFILEON*.*TObackup@"10.10.10.22"IDENTIFIEDBY‘1234" 2.增加一个数据库作为同步数据库: createdatabasebackup 主从模式:A->B A为master 修改Amysql的my.ini文件。在mysqld配置项中加入下面配置: server-id=1 log-bin #设置需要记录log可以设置log-bin=c:mysqlbakmysqllog设置日志文件的目录, #其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。 binlog-do-db=backup#指定需要日志的数据库 重起数据库服务。 用showmasterstatus命令看日志情况。 B为slave 修改Bmysql的my.ini文件。在mysqld配置项中加入下面配置: server-id=2 master-host=10.10.10.22 master-user=backup#同步用户帐号 master-password=1234 master-port=3306 master-connect-retry=60预设重试间隔60秒 replicate-do-db=backup告诉slave只做backup数据库的更新 重起数据库 用showslavestatus看同步配置情况。 注意:由于设置了slave的配置信息,mysql在数据库目录下生成master.info 所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。 双机互备模式。 如果在A加入slave设置,在B加入master设置,则可以做B->A的同步。 在A的配置文件中mysqld配置项加入以下设置: master-host=10.10.10.53 master-user=backup master-password=1234 replicate-do-db=backup master-connect-retry=10 在B的配置文件中mysqld配置项加入以下设置: log-bin=c:mysqllogmysqllog binlog-do-db=backup 注意:当有错误产生时*.err日志文件。同步的线程退出,当纠正错误后要让同步机制进行工作,运行slavestart 重起AB机器,则可以实现双向的热备。 测试: 向B批量插入大数据量表AA(1872000)条 A数据库每秒钟可以更新2500条数据。 2.数据库目录同步,方法和文件同步一样,设置好需要同步的两个数据库目录就可以了! 缺点很明显,数据同步只能单向进行,可以作为备份方案 3.用专用的MySQL同步软件进行同步 这方面的软件有SQLBalance和MyReplicator,优点是方便直观,还有很多争强功能! 缺点和2一样,只能单项同步! 当然你也可以修改镜像网站的程序为提交数据到母数据库,读取则在当前镜像下的数据,不过,修改起来麻烦!普通用户修改也非常难!呵呵,大家了解一下就可以!给大家一个思路!有能力的朋友可以试试阿! 4.关于MySQL论坛的数据同步 由于数据来源的不可控制(不好表达),论坛数据是实时的,而且还要考虑来自镜像论坛的数据,如何实现镜像论坛与母论坛数据同步呢? 用1中介绍的MySQL自带的数据库同步功能互相备份模式就可以实现的! 不过,具体的应用我没有测试!稳定性不敢保证! 有能力的朋友推荐用下面这种思路来同步,相对来说减少点效率,但能减少发生的错误! 比如镜像论坛数据同步: 1.母论坛和镜像论坛的数据全写在母论坛数据库里,主从模式,读取只在本地读取,这个需要修改程序! 2.每次写数据,都同时提交到两个数据库中,安全,但是效率很差,也得修改程序! MSSQL MSSQL数据同步利用数据库复制技术实现数据同步更新(来自网络,也是非常完美的教程) 复制的概念 复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。 SQL复制的基本元素包括 出版服务器、订阅服务器、分发服务器、出版物、文章 SQL复制的工作原理 SQLSERVER主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器 SQLSERVER复制技术类型 SQLSERVER提供了三种复制技术,分别是: 1、快照复制(呆会我们就使用这个) 2、事务复制 3、合并复制 只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。 第一先来配置出版服务器 (1)选中指定[服务器]节点 (2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令 (3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。 (4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution) 第二创建出版物 (1)选中指定的服务器 (2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框 (3)选择要创建出版物的数据库,然后单击[创建发布] (4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助) (5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQLSERVER2000"的数据库服务器 (6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表 (7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。 第三设计订阅 (1)选中指定的订阅服务器 (2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅] (3)按照单击[下一步]操作直到系统会提示检查SQLSERVER代理服务的运行状态,执行复制操作的前提条件是SQLSERVER代理服务必须已经启动。 (4)单击[完成]。完成订阅操作。 完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开C:/ProgramFiles/MicrosoftSQLServer/MSSQL/REPLDATA/unc/XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表— 一个手工同步的方案 --定时同步服务器上的数据 --例子: --测试环境,SQLServer2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test --服务器上的表(查询分析器连接到服务器上创建) createtable[user](idintprimarykey,numbervarchar(4),namevarchar(10)) go --以下在局域网(本机操作) --本机的表,state说明:null表示新增记录,1表示修改过的记录,0表示无变化的记录 ifexists(select*fromdbo.sysobjectswhereid=object_id(N"[user]")andOBJECTPROPERTY(id,N"IsUserTable")=1) droptable[user] GO createtable[user](idintidentity(1,1),numbervarchar(4),namevarchar(10),statebit) go --创建触发器,维护state字段的值 createtriggert_stateon[user] afterupdate as update[user]setstate=1 from[user]ajoininsertedbona.id=b.id wherea.stateisnotnull go --为了方便同步处理,创建链接服务器到要同步的服务器 --这里的远程服务器名为:xz,用户名为:sa,无密码 ifexists(select1frommaster..sysserverswheresrvname="srv_lnk") execsp_dropserver"srv_lnk","droplogins" go execsp_addlinkedserver"srv_lnk","","SQLOLEDB","xz" execsp_addlinkedsrvlogin"srv_lnk","false",null,"sa" go --创建同步处理的存储过程 ifexists(select*fromdbo.sysobjectswhereid=object_id(N"[dbo].[p_synchro]")andOBJECTPROPERTY(id,N"IsProcedure")=1) dropprocedure[dbo].[p_synchro] GO createprocp_synchro as --setXACT_ABORTon --启动远程服务器的MSDTC服务 --execmaster..xp_cmdshell"isql/S"xz"/U"sa"/P""/q"execmaster..xp_cmdshell""netstartmsdtc"",no_output"",no_output --启动本机的MSDTC服务 --execmaster..xp_cmdshell"netstartmsdtc",no_output --进行分布事务处理,如果表用标识列做主键,用下面的方法 --BEGINDISTRIBUTEDTRANSACTION --同步删除的数据 deletefromsrv_lnk.test.dbo.[user] whereidnotin(selectidfrom[user]) --同步新增的数据 insertintosrv_lnk.test.dbo.[user] selectid,number,namefrom[user]wherestateisnull --同步修改的数据 updatesrv_lnk.test.dbo.[user]set number=b.number,name=b.name fromsrv_lnk.test.dbo.[user]a join[user]bona.id=b.id whereb.state=1 --同步后更新本机的标志 update[user]setstate=0whereisnull(state,1)=1 --COMMITTRAN go --创建作业,定时执行数据同步的存储过程 ifexists(SELECT1frommsdb..sysjobswherename="数据处理") EXECUTEmsdb.dbo.sp_delete_job@job_name="数据处理" execmsdb..sp_add_job@job_name="数据处理" --创建作业步骤 declare@sqlvarchar(800),@dbnamevarchar(250) select@sql="execp_synchro"--数据处理的命令 ,@dbname=db_name()--执行数据处理的数据库名 execmsdb..sp_add_jobstep@job_name="数据处理", @step_name="数据同步", @subsystem="TSQL", @database_name=@dbname, @command=@sql, @retry_attempts=5,--重试次数 @retry_interval=5--重试间隔 --创建调度 EXECmsdb..sp_add_jobschedule@job_name="数据处理", @name="时间安排", @freq_type=4,--每天 @freq_interval=1,--每天执行一次 @active_start_time=00000--0点执行 go2023-07-26 08:33:482
麒麟八儿在四方,解三个0到9的数字
72023-07-26 08:34:242
分全给!求一个WEB程序阅读题答案!
dim rs,tsql "定义变量rs,tsqldim rst "定义变量rstdim id "定义变量idid=request("id") "取传递过来的id的值,赋给变量idset rs=server.createobject("ADODB.recordset") "建立记录集sql="select * from "& db_manager_table &" where" db_managerUser_ID &"="&id "打开表db_manager_table,选择db_manageuser_id的值等于变量id的记录rs.open sql,conn,3,3 "打开记录集username=rs(db_ManagerUser_name) "取db_ManagerUser_name的值,赋给username(写错了,少“”)rs.close "关闭记录集set rs=nothing "清空记录集set rst=server.createobject("ADODB.recordset") "建立记录集if request ("name")="del" then "如果传递过来的name值等于del,则rst.open"delete from "& db_manager_table &" where"& db_manageruser_ID &"="+request("id"),conn,3,3 "打开表db_manageruser_table,并删除db_manageruser_ID等于id的记录end if "if语句结束rst.close "关闭记录集set rst=nothing "清空记录集2023-07-26 08:34:312
用TSQL语言表示x是5或7的倍数
declare @s int =42select case when @s%5=0 and @s%7= 0 then "既是3的倍数也是7的倍数"when @s%5=0 or @s%7 =0 then "是3或者7的倍数"else "no" end AS 结果2023-07-26 08:34:391
sql的关于exec
应该是执行存储过程的意思,参数为chat,nandu2023-07-26 08:34:461
sql中的sp_helptext、sp_help 、sp_depends是什么意思?
sp_helptexthttp://baike.baidu.com/view/3313988.htmhttp://www.yesky.com/imagesnew/software/tsql/ts_sp_help_7c38.htmsp_help http://www.yesky.com/imagesnew/software/tsql/ts_sp_help_304w.htmsp_dependshttp://www.yesky.com/imagesnew/software/tsql/ts_sp_da-di_9qlv.htm可以参考这些解释的蛮清楚2023-07-26 08:34:561
关于SQL的问题,存储过程的!
1、CREATE FUNCTION return_num (@Class_Num varchar(20) )RETURNS int ASBEGIN RETURN ( select cout(*) from classmates where classnum=@Class_Num )END3、BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode = 0IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N"Database 数据库名字" AND category_class=1)BEGINEXEC @ReturnCode = msdb.dbo.sp_add_category @class=N"JOB", @type=N"LOCAL", @name=N"Database 数据库名字"IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY(16)EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N"备份数据库名字", @enabled=1, @notify_level_eventlog=0, @notify_level_email=0, @notify_level_netsend=0, @notify_level_page=0, @delete_level=0, @description=N"每天上午数据库备份", @category_name=N"Database 数据库名字", @owner_login_name=N"sa", @job_id = @jobId OUTPUTIF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N"Daily Backup", @step_id=1, @cmdexec_success_code=0, @on_success_action=1, @on_success_step_id=0, @on_fail_action=2, @on_fail_step_id=0, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N"TSQL", @command=N"declare @strDate nvarchar(max);set @strDate = N""D:DataBaseAutoBackup数据库名字_"" + Convert(nvarchar(8),getdate(),112) + N"".bak""BACKUP DATABASE [数据库名字] TO DISK = @strDate WITH NOFORMAT, NOINIT, NAME = N""数据库名字_Dev-完整 数据库 备份"", SKIP, NOREWIND, NOUNLOAD, STATS = 10GO", @database_name=N"master", @flags=0IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N"Daily Backup", @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=1, @freq_subday_interval=0, @freq_relative_interval=0, @freq_recurrence_factor=0, @active_start_date=20120510, @active_end_date=99991231, @active_start_time=50000, @active_end_time=235959, @schedule_uid=N"f90cfdc3-cb5d-4e19-9e93-99b8921d36c0"IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N"(local)"IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTIONEndSave:GO打字不易,如满意,望采纳。满意请采纳。2023-07-26 08:35:051
如何使用SQL语句查到当前SQL SERVER 2000服务器的IP地址
在一些需求中,可能我们需要知道连接到SqlServer的前端程序的一些系统信息,比如前端连接的计算机名称,IP地址,什么时候开始请求连接,什么时候结束连接等信息。如果你对SqlServer的系统函数或视图不太了解,这个功能看起来好像比较复杂,而实际上,SqlServer的动态管理视图已经给我们提供了这些信息,下面我们来看两个动态管理视图。1、Sys.dm_exec_Sessions这个视图中提供了所有连接sqlserver的客户端的一些信息,下面是Sys.dm_exec_Sessions返回的列:列名数据类型说明Session_idsmallint标识与每个活动主连接关联的会话。login_timedatetime建立会话的时间。host_namenvarchar(128)与会话关联的主机。program_namenvarchar(128)与会话关联的程序。host_process_idint与会话关联的进程ID。client_versionint客户端连接到服务器所用的接口版本。client_interface_namenvarchar(32)客户端连接到服务器所用的接口名称。security_idvarbinary(85)与登录名关联的MicrosoftWindows安全ID。login_namenvarchar(128)与会话关联的SQL登录名。nt_domainnvarchar(128)从中建立会话连接的域。nt_user_namenvarchar(128)与会话关联的用户名。statusnvarchar(30)会话的状态。可能的值:1,运行-当前正在运行一个或多个请求2,睡眠-当前没有运行任何请求3,休眠-会话处于登录前状态context_infovarbinary(128)会话的CONTEXT_INFO值。cpu_timeint该会话所占用的CPU时间(毫秒)。memory_usageint该会话所占用的8KB内存页数。total_scheduled_timeint计划内含请求的会话的执行所耗用的总计时间(毫秒)。total_elapsed_timeint自会话建立以来已耗用的时间(毫秒)。endpoint_idint与会话关联的端点的ID。last_request_start_timedatetime最近一次会话请求的开始时间。这包括当前正在执行的请求。last_request_end_timedatetime最近一次会话请求的完成时间。readsbigint在该会话期间该会话中的请求所执行的读取次数。Writesbigint在该会话期间该会话中的请求所执行的写入次数。logical_readsbigint已对该会话执行的逻辑读取数。is_user_processbit如果会话是系统会话,则为0。否则,为1。text_sizeint会话的TEXTSIZE设置。languagenvarchar(128)会话的LANGUAGE设置。date_formatnvarchar(3)会话的DATEFORMAT设置。date_firstsmallint会话的DATEFIRST设置。quoted_identifierbit会话的QUOTED_IDENTIFIER设置。arithabortbit会话的ARITHABORT设置。ansi_null_dflt_onbit会话的ANSI_NULL_DFLT_ON设置。ansi_defaultsbit会话的ANSI_DEFAULTS设置。ansi_warningsbit会话的ANSI_WARNINGS设置。ansi_paddingbit会话的ANSI_PADDING设置。ansi_nullsbit会话的ANSI_NULLS设置。concat_null_yields_nullbit会话的CONCAT_NULL_YIELDS_NULL设置。transaction_isolation_levelsmallint会话的事务隔离级别。0=未指定1=未提交读取2=已提交读取3=可重复4=可序列化5=快照lock_timeoutint会话的LOCK_TIMEOUT设置。该值以毫秒计。deadlock_priorityint会话的DEADLOCK_PRIORITY设置。row_countbigint到目前为止会话返回的行数。prev_errorint会话返回的最近一个错误的ID。比如说,我们要看那些主机有连接到了sqlserver服务器,可以使用下面的sql语句:selectdistincthost_namefromsys.dm_exec_Sessions要看那些用户已连接到sqlserver服务器:selectdistinctlogin_namefromsys.dm_exec_Sessions当然,利用上面的列,我们可以获得想要的客户端信息2、Sys.dm_exec_connections这个视图返回了连接sqlserver服务器上面的每个连接的详细信息,下面是Sys.dm_exec_connections返回的列:列名数据类型说明Session_idint标识与此连接关联的会话。most_recent_Session_idint显示与此连接关联的最近请求的会话ID。connect_timedatetime连接建立时的时间戳。net_transportnvarchar(40)说明该连接使用的物理传输协议。protocol_typenvarchar(40)指定负载的协议类型。此参数当前可区分TDS(TSQL)和SOAP。protocol_versionint与此连接关联的数据访问协议的版本。endpoint_idint与此连接关联的端点的唯一标识符。此endpoint_id可用于查询sys.endpoints视图。encrypt_optionnvarchar(40)说明是否为此连接启用了加密的布尔值。auth_schemenvarchar(40)指定与此连接一起使用的SQLServer/NT身份验证。node_affinitysmallint显示与此连接关联的SOS节点。num_readsint此连接中已发生的读包次数。num_writesint此连接中已发生的写数据包次数。last_readdatetime此连接中上一次发生读操作的时间戳。last_writedatetime此连接中上一次发生写操作的时间戳。net_packet_sizeint用于信息和数据的网络包的大小。client_net_addressvarchar(40)与此服务器连接的客户端的主机地址。client_tcp_portint与该连接关联的客户机上的端口号。local_net_addressvarchar(40)显示此连接的目标服务器的IP地址。只对使用TCP传输提供程序的连接可用。local_tcp_portint如果此连接使用TCP传输,则显示该连接的目标服务器的TCP端口。connection_iduniqueidentifier对每个连接进行唯一标识。parent_connection_iduniqueidentifier标识MARS会话正在使用的主要连接。most_recent_sql_handlevarbinary(64)此连接上执行的上一个请求的SQL句柄。most_recent_sql_handle列始终与most_recent_Session_id列同步。比如,我要查看当前连接的客户端IP与sqlserver所在服务器的IP,可以用下面的sql查询:selectclient_net_address"客户端IP",local_net_address"服务器的IP"fromsys.dm_exec_connectionswhereSession_id=@@spid@@spid的作用是返回当前进程的会话ID。2023-07-26 08:35:121
VB 从数据库中读出的记录怎样分别取得其各个字段的值
给你一个例子 看一下就应该懂了Private Sub cmdRead_Click()Dim RS As ADODB.RecordsetDim tSql As StringDim I As IntegerSet RS = New ADODB.RecordsettSql = "Select * From TestUser Where XueHao=" & Trim(txtID.Text)RS.Open tSql, CN, adOpenStatic, adLockOptimisticIf RS.RecordCount > 0 Then txtName.Text = RS.Fields("XingMing") txtScore.Text = RS.Fields("ChengJi")Else MsgBox "数据库中未找到相应记录", vbOKOnly, "提示"End IfSet RS = NothingEnd SubPrivate Sub Form_Load()Set CN = New ADODB.Connection"QQ.mdb需要指定全路径,如C:qq.mdb,具体位置自己修改。CN.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:QQ.mdb;Uid=Admin;Pwd="txtID.Text = "": txtName.Text = "": txtScore.Text = ""End SubPrivate Sub Form_Unload(Cancel As Integer)Set CN = NothingEnd Sub2023-07-26 08:35:222
SQL2005在哪里写TSQL语句,本人菜鸟谢谢了,大神帮忙啊
登录mycrosoft SQL Server Management Statio 企业管理器里界面,在文件菜单下面一点有个新建查询。。。点击即可2023-07-26 08:35:411
mysql是tsql语句还是plsql语句
都不是。mysql是关系数据库,使用标准的SQL语言;tsql是标准SQL语言的加强版plsql是ORACLE数据库的特有的语言2023-07-26 08:35:511
icom ic-gw100车载电台是什么频段的?
应该2米段,IC-GW100车台调频方法1. 按V M键,选择信道数。2. 重复按一下,消除信道数。3. 按MHZ/MW选择1MHZ频率进度,调好接收频率。4. 按SET/LOCK,一直到显示DUP(S.000),按MHZ/MW选择频差。5. 按DUP选择DUP-或DUP。6. 按MHZ/MW三秒,嘀嘀两声存入。7. 按V M键显示信道数。按MHZ/MW、DUP、TSQL、PGR/SC同时开机→显示------------旋钮调1按SET/LOCK旋钮调2按SET/LOCK旋钮调3按SET/LOCK按SET/LOCK调4按SET/LOCK显示CH12023-07-26 08:35:581
sql server中备份恢复数据库中的一张表。高手来!~
用JOB 企业管理器 --管理 --SQL Server代理 --右键作业 --新建作业 --"常规"项中输入作业名称 --"步骤"项 --新建 --"步骤名"中输入步骤名 --"类型"中选择"Transact-SQL 脚本(TSQL)" --"数据库"选择执行命令的数据库 --"命令"中输入要执行的语句: --确定 --"调度"项 --新建调度 --"名称"中输入调度名称 --"调度类型"中选择你的作业执行安排 --如果选择"反复出现" --点"更改"来设置你的时间安排为一天一次 然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 设置方法: 我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.2023-07-26 08:36:081
sql server 求解
1、CREATE FUNCTION return_num (@Class_Num varchar(20) )RETURNS int ASBEGIN RETURN ( select cout(*) from classmates where classnum=@Class_Num )END3、BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode = 0IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N"Database 数据库名字" AND category_class=1)BEGINEXEC @ReturnCode = msdb.dbo.sp_add_category @class=N"JOB", @type=N"LOCAL", @name=N"Database 数据库名字"IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY(16)EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N"备份数据库名字", @enabled=1, @notify_level_eventlog=0, @notify_level_email=0, @notify_level_netsend=0, @notify_level_page=0, @delete_level=0, @description=N"每天上午数据库备份", @category_name=N"Database 数据库名字", @owner_login_name=N"sa", @job_id = @jobId OUTPUTIF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N"Daily Backup", @step_id=1, @cmdexec_success_code=0, @on_success_action=1, @on_success_step_id=0, @on_fail_action=2, @on_fail_step_id=0, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N"TSQL", @command=N"declare @strDate nvarchar(max);set @strDate = N""D:DataBaseAutoBackup数据库名字_"" + Convert(nvarchar(8),getdate(),112) + N"".bak""BACKUP DATABASE [数据库名字] TO DISK = @strDate WITH NOFORMAT, NOINIT, NAME = N""数据库名字_Dev-完整 数据库 备份"", SKIP, NOREWIND, NOUNLOAD, STATS = 10GO", @database_name=N"master", @flags=0IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N"Daily Backup", @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=1, @freq_subday_interval=0, @freq_relative_interval=0, @freq_recurrence_factor=0, @active_start_date=20120510, @active_end_date=99991231, @active_start_time=50000, @active_end_time=235959, @schedule_uid=N"f90cfdc3-cb5d-4e19-9e93-99b8921d36c0"IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N"(local)"IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTIONEndSave:GO2023-07-26 08:36:152
怎么刷新SQL Server 2008中查询后的表格?
楼主,你好!按照你的描述,我试了一遍,结果就如你所说的那样。这个是因为你没有把编辑的窗口关闭导致的,我把编辑的窗口关闭了之后,再次右键选择编辑时,结果就是修改后的记录了。如果想在不关闭编辑窗口,同时不重新右键打开编辑窗口的前提下,想看到修改后的记录,可以鼠标点击红色“执行SQL”按钮来刷新数据即可。以上我已经通过测试了,希望能帮助到你。2023-07-26 08:36:257