transact-sql

利用VS调试存储过程

╄→гoц情女王★ 提交于 2020-03-16 07:17:24
SQL SERVER2008存储过程调试 昨天被问到sql server中存储过程怎么调试,我曾经写存储过程,调试方法非常笨拙,就是逐条运行语句,然后查看结果是不是预期的,这样的调试方法,实在是无奈之举,极大程度地限制了开发速度和准确性。今天在他的提点下,研究了下SQL SERVER 2008的存储过程调试。 1.在SQL SERVER2008中调试存储过程 下面内容引自MSDN SQL SERVER 2008的SSMS是支持单步debug的,可是在调试之前必须配置权限。 假设 SQL Server Management Studio 与 SQL Server 数据库引擎实例在同一台计算机上执行,则对于执行 Transact-SQL 调试器没有配置要求。可是,当 SQL Server Management Studio 与数据库引擎实例在不同计算机上执行时,若要执行 Transact-SQL 调试器,则必须在两台计算机上使用 “Windows 防火墙” 控制面板应用程序来启用程序和port例外。 在执行数据库引擎实例的计算机上,在 “Windows 防火墙” 中指定下面信息: 将 TCP port 135 加入�到例外列表。 将程序 sqlservr.exe 加入�到例外列表。默认情况下,sqlservr.exe 安装在 C:\Program Files\Microsoft SQL

【Transact-SQL】习题三(4) S、P、J、SPJ (create & insert)

泪湿孤枕 提交于 2020-03-09 07:57:52
--建表 create table s --建立s表 ( sno varchar(5) primary key, sname varchar(10) not null, status int not null, city varchar(10) not null ) create table p --建立p表 ( pno varchar(5) primary key, pname varchar(10) not null, color varchar(50) not null, weight int not null ) create table j --建立j表 ( jno varchar(5) primary key, jname varchar(10) not null, city varchar(10) not null ) create table spj --建立spj表 ( sno varchar(5), pno varchar(10) not null, jno varchar(10) not null, qty int not null ) --插入数据 insert into s values('s1','精益',20,'天津') --插入S表 insert into s values('s2','盛锡',10,'北京') insert into s

【Transact-SQL】教材3.5“数据更新”的几道例题(INSERT-DELETE-UPDATE)

耗尽温柔 提交于 2020-03-07 03:33:28
在“更新数据”语句的前后,适当增加简单的查询语句,便于查看更新的效果。 下面这句查询的意思是:查看Student表的全部数据。 SELECT * FROM Student 【例3.72】-P115 --第一步:建表 CREATE TABLE Dept_age ( Sdept CHAR(15), /*系名*/ Avg_age SMALLINT /*学生平均年龄*/ ); --第二步:插入数据 INSERT INTO Dept_age(Sdept,Avg_age) SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept; --第三步:查看数据 SELECT * FROM Dept_age 【例3.73】-P115 SELECT * FROM Student UPDATE Student SET Sage=22 WHERE Sno='201215121'; SELECT * FROM Student 【例3.74】-P115 SELECT * FROM Student UPDATE Student SET Sage= Sage+1; SELECT * FROM Student 【例3.75】-P116 SELECT * FROM SC UPDATE SC SET Grade=1 WHERE Sno IN ( SELECT Sno FROM

OPENQUERY (Transact-SQL)

拜拜、爱过 提交于 2020-03-04 09:04:09
对给定的链接服务器执行指定的传递查询。该服务器是 OLE DB 数据源。OPENQUERY 可以在查询的 FROM 子句中引用,就好象它是一个表名。OPENQUERY 也可以作为 INSERT、UPDATE 或 DELETE 语句的目标表进行引用。但这要取决于 OLE DB 访问接口的功能。尽管查询可能返回多个结果集,但是 OPENQUERY 只返回第一个。 Transact-SQL 语法约定 语法 OPENQUERY ( linked_server ,'query' ) 参数 linked_server 表示链接服务器名称的标识符。 ' query ' 在链接服务器中执行的查询字符串。该字符串的最大长度为 8 KB。 注释 OPENQUERY 不接受其参数的变量。 OPENQUERY 不能用于对链接服务器执行扩展存储过程。但是,通过使用四部分名称,可以在链接服务器上执行扩展存储过程。例如: EXEC SeattleSales.master.dbo.xp_msver 权限 任何用户都可以执行 OPENQUERY。用于连接到远程服务器的权限是从为链接服务器定义的设置中获取的。 示例 A. 执行 SELECT 传递查询 以下示例将使用“用于 Oracle 的 Microsoft 访问接口”针对 Oracle 数据库创建一个名为 OracleSvr 的链接服务器。然后

【Transact-SQL】找出不包含字母、不包含汉字的数据

岁酱吖の 提交于 2020-01-17 00:58:51
测试的同事,让我帮忙写个sql语句,找出表中xx列不包含汉字的行。 下面的代码就能实现。 IF EXISTS(SELECT * FROM sys.tables WHERE name = 't') DROP TABLE t go CREATE TABLE t(str VARCHAR(100)) INSERT INTO t VALUES('abc'),('ABZ'),('abc一二三'),('一二三'),('123456789') --1.不包含字母 SELECT * FROM t WHERE str NOT LIKE '%[a-zA-Z]%' SELECT * FROM t WHERE patindex('%[a-zA-Z]%',str) =0 --2.不包含汉字 SELECT * FROM t WHERE str NOT LIKE '%[吖-座]%' SELECT * FROM t WHERE patindex('%[吖-座]%',str) =0 来源: https://www.cnblogs.com/momogua/archive/2013/05/15/8304583.html

【Transact-SQL】找出不包含字母、不包含汉字的数据

坚强是说给别人听的谎言 提交于 2019-12-11 00:06:37
原文: 【Transact-SQL】找出不包含字母、不包含汉字的数据 测试的同事,让我帮忙写个sql语句,找出表中xx列不包含汉字的行。 下面的代码就能实现。 IF EXISTS(SELECT * FROM sys.tables WHERE name = 't') DROP TABLE tgo CREATE TABLE t(str VARCHAR(100)) INSERT INTO tVALUES('abc'),('ABZ'),('abc一二三'),('一二三'),('123456789') --1.不包含字母SELECT *FROM tWHERE str NOT LIKE '%[a-zA-Z]%' SELECT *FROM tWHERE patindex('%[a-zA-Z]%',str) =0 --2.不包含汉字SELECT *FROM tWHERE str NOT LIKE '%[吖-座]%' SELECT *FROM tWHERE patindex('%[吖-座]%',str) =0 点赞 收藏 分享 文章举报 不想长大啊 发布了416 篇原创文章 · 获赞 135 · 访问量 94万+ 他的留言板 关注 来源: https://www.cnblogs.com/lonelyxmas/p/12019955.html

【Transact-SQL】SQL Server自动把left join自动转化为inner join、以及关联时的数据重复问题

谁说胖子不能爱 提交于 2019-12-11 00:06:10
原文: 【Transact-SQL】SQL Server自动把left join自动转化为inner join、以及关联时的数据重复问题 1、SQL Server自动把left join自动转化为inner join的问题: 下面的两个语句都是left join的,但是一个却转化成了 inner join drop table a,Bgo create table a(id int) insert into aselect 1 union allselect 2 create table b(id int,xxx varchar(10)) insert into bselect 1,'xxx' union allselect 2,'xx'go --这个还是left joinselect *from a left join b on a.id = b.id and b.xxx = 'xxx'/*id id xxx1 1 xxx2 NULL NULL*/ select * --这个就是转化为inner joinfrom a left join b on a.id = b.id where b.xxx = 'xxx'/*id id xxx1 1 xxx*/ 下面的图是执行计划: 2、下面的语句,运行后会出来几条记录呢? select*from ( select 1 as id)a

【Transact-SQL】让人快遗忘的游标

断了今生、忘了曾经 提交于 2019-12-11 00:04:57
原文: 【Transact-SQL】让人快遗忘的游标 最初学SQL Server的时候,当学到游标的时候,突然有了一种亲切感,因为这种通过一个while循环,一条一条的处理数据的方式,很像学过的过程式语言,与C语言很相似。 慢慢的,对一些稍微复杂一点的SQL ,往往就会想到用游标去处理。也正是因为大量使用,渐渐的,在使用的过程中,也真正体会到了游标的低效,一条一条的处理方式,在数据量很小的情况下还可以,当数据一旦很多,而处理过程又非常复杂时,往往速度就会很慢。 于是乎,慢慢的开始放弃使用游标,最后都快忘记了这个老朋友了。 今天,在论坛突然发现有人提了一个问题,希望用游标来解决,于是乎,又让我再次想起了游标。 下面是那个网友提出的问题: 我有两张表,分别是:table1 KHMC SPDM DJ SL XSSL 广西骆俊峰 5609B 100.0000 12 NULL 广西骆俊峰 5609B 80.0000 7 NULL 广西骆俊峰 5609B 60.0000 6 NULL 广西骆俊峰 5609B 50.0000 13 NULL 广西骆俊峰 5609B 40.0000 21 NULL table2 khmc spdm sl bysl 广西骆俊峰 5609B 20 NULL 而我想要的结果是用第二张表里的数据去一行行的填充第一个表的数据(关联关系是 khmc,spdm): KHMC

DATEADD (Transact-SQL)

偶尔善良 提交于 2019-12-03 07:09:57
DATEADD (Transact-SQL) This function adds a specified number value (as a signed integer) to a specified datepart of an input date value, and then returns that modified value. See Date and Time Data Types and Functions (Transact-SQL) for an overview of all Transact-SQL date and time data types and functions. DATEADD (datepart , number , date ) datepart The part of date to which DATEADD adds an integer number . This table lists all valid datepart arguments. day的缩写是dd或d 来源: https://www.cnblogs.com/chucklu/p/11782410.html

SQL Server 默认跟踪(Default Trace)介绍使用

六眼飞鱼酱① 提交于 2019-12-03 06:29:32
背景 当数据库的表、存储过程经常别修改,当这些修改造成BUG的时候,很多开发都不承认是他们干的,那我们有没办法找出谁干的呢?   SQL Server有Default Trace默认跟踪,数据库记录信息到log.trc文件,可以查看trace_event_id,46表示Create对象(Object:Created),47表示Drop对象(Object:Deleted),93表示日志文件自动增长(Log File Auto Grow),164表示Alter对象(Object:Altered),20表示错误日志(Audit Login Failed)。   虽然可以通过上面的方式找到相关的操作,但是它有两个缺点:     1) log.trc文件是滚动更新文件,所有有可能会被系统删除,你找不了太久的数据;     2) 有些操作你可能是后知后觉,出了问题才会去找问题,我们应该主动去监控这些DDL; 查看默认跟踪信息(Default Trace) Trace作为一个很好的数据库追踪工具,在SQL Server 2005中便集成到系统功能中去,并且默认是开启的,当然我们也可以手动的关掉它,它位于sp_config配置参数中,我们可以通过以下语句查看: select * from sys.configurations where configuration_id = 1568