1.SQLSERVER 中GO的作用**
go 向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号。go是把t-sql语句分批次执行。(一步成功了才会执行下一步,即一步一个go)
BEGIN 和 END 语句用于将多个 Transact-SQL 语句组合为一个逻辑块。在控制流语句必须执行包含两条或多条 Transact-SQL 语句的语句块的任何地方,都可以使用 BEGIN 和 END 语句。
2.SQL中的局部变量和全局变量
局部变量
声明:DECLARE @local_variable data_type
@local_variable 是变量的名称。变量名必须以 at 符 (@) 开头。data_type 是任何由系统提供的或用户定义的数据类型。变量不能是 text、ntext 或 image 数据类型。
全局变量
全局变量是系统预定义的,返回一些系统信息,全局变量以两个@@开头。
全局变量是sql server(WINDOWS平台上强大的数据库平台)系统内部使用的变量,其作用范围并不局限于某一程序,而是任何程序均可随时调用全局变量通常存储一些sql server(WINDOWS平台上强大的数据库平台)的配置设定值和效能统计数据。用户可在程序中用全局变量来测试系统的设定值或Transact-SQL命令执行后的状态值。有关sql server(WINDOWS平台上强大的数据库平台) 全局变量的详细情况请参见附录。
在SQL注入时常用的全局变量
@@datadir # 数据库的安装路径
@@hostname #主机名
@@version_compile_os #操作系统
3.Sqlserver存储过程中使用Select和Set给变量赋值
Sqlserver存储过程是时常使用到的一个数据库对象,在存储过程中会使用到Declare来定义存储过程变量,定义的存储过程变量可以通过Set或者Select等关键字方法来进行赋值操作,QQ账号拍卖使用Set对存储过程变量赋值为直接赋值,使用Select则一般从数据表中查找出符合条件的属性进行赋值操作。
例如,下面定义一个存储过程年龄字段@Age字段。
Declare @Age int;
使用Set方式赋值的语句可写作为:Set @Age=32;
如果我们要从表UserTable中查找出名字为张三的人的年龄,然后将之赋值给@Age变量,就得使用Select方式来赋值了,赋值方式如下:
Select @Age=Age FROM UserTable Where Name='张三';
此处使用Select进行赋值的话需要注意个点,Select查询语句一条记录都没查找出来,@Age字段将不会有任何改变,也不会赋值为Null,这个情况博主在实际业务中遇到过,就是使用了while循环,然后在循环中采用Select对特定变量赋值,发现如果Select查询集合为空集的时候,变量值不是赋值为NULL,而是直接保持上一次循环赋值的结果。
- Sql Server 存储过程中print @变量和select @变量的区别
print @变量 是以文本的方式在消息栏显示。
select @变量 是以表的形式在结果栏显示。
SELECT 为查询语句,而PRINT是输出语句
SELECT 后可以跟任copy意的SQL ERVER数据类型,字段、标量函数等
PRINT后跟的只能有三种情况
1:PRINT后可以跟字符串或 Unicode 字符串常量。
2:PRINT后可以跟任何有效的字符数据类型的变量,且数据类型必须是 char 或 varchar,或者必须能够隐式转换为这些数据类型。
3:PRINT后可以跟返回字符串的表达式。可包括串联的文字值、函数和变量。消息zd字符串最长可为 8,000 个字符,超过该值以后的任何字符均被截断。
4.SQL与T-SQL区别
SQL是Structrued Query Language的缩写,即结构化查询语言。它是负责与ANSI(美国国家标准学会)维护的数据库交互的标准。作为关系数据库的标准语言,它已被众多商用DBMS产品所采用, 使得它已成为关系数据库领域中一个主流语言,不仅包含数据查询功能,还包括插入、删除、更新和数据定义功能.
接下来说一下T-SQL语言:
T-SQL是SQL语言的一种版本,且只能在SQL SERVER上使用。它是ANSI SQL的加强版语言、提供了标准的SQL命令。另外,T-SQL还对SQL做了许多补允,提供了类似C、Basic和Pascal的基本功能,如变量说明、流控制语言、功能函数等。”
5.SQL Server decimal 和 numeric 区别
数据类型 decimal 和 numeric 虽然在小数存储方面都一样,但建议使用Decimal
6.SQL Server 小数类型(float 和 decimal)
在SQL Server中,实际上小数数值只有两种数据类型:float 和 decimal,分别是近似数值和精确数值。其他小数类型,都可以使用float和decimal来替代,例如,双精度(double precision)数据类型等价于 float(53),real等价于float(24),numeric是 decimal的同义词,应该避免在程序中直接使用 double precision、real和numeric,而是用 float(24) 、float(53)和decimal 代替。
float是近似数值,存在精度缺失;decimal是精确数值,不存在精度损失。当数值不允许精度丢失时,使用 decimal数据类型存储数据。在计算小数的除法时,SQL Server 内部隐式升级数据类型,根据小数数值的数据类型,就近向float(24) 或float(53)转换。
7.sqlServer 重命名存储过程
语法:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
例子:
EXEC sp_rename 'HumanResources.uspGetAllEmployeesTest', 'uspEveryEmployeeTest';
- sqlserver中 exists和not exists的作用
not exists 和not in 分别是exists 和 in 的 对立面。
exists (sql 返回结果集为真)
not exists (sql 不返回结果集为真)