SQL Server变量与批处理

变量

用DECLARE声明一个或多个变量,用SET语句可以把一个变量设置成指定的值。

DECLARE @A AS VARCHAR(50);

SET @A = 1

SQL Server2008新增了对同一语句声明和赋值变量。

DECLARE @B AS INT = 10;

SET语句每次只能对一个变量进行操作,所以如果要对多个变量赋值,就必须使用多次SET语句。当从同一行取出不同的列的值时,可能会带来不必要的开销。

SET @A = (SELECT Name FROM T_Order WHERE OrderID = 1)

SET @B = (SELECT OrderID FROM T_Order WHERE OrderID = 1)

SQL Server还支持一种非标准的赋值SELECT语句,允许在单独的语句中既能查询数据,又能把同一行的多个值赋值给多个变量。

SELECT @A = Name,@B = OrderID

FROM T_Order

WHERE OrderID = 1

标量子查询:返回结果只有一行的子查询。

 

 

批处理

批处理是客户端应用程序发送一条或多条T-SQL语句到SQL Server,SQL Server将批处理语句作为单个可执行的单元。批处理要处理的阶段有:分析,解析,优化。

SQL Server Management Studio提供了一个客户端命令GO,可以发出一批T-SQL语句结束的信号。注意,GO是客户端的工具,而不是T-SQL的服务器命令。

批处理是作为一个单元而进行分析和执行的一组命令。如果分析成功,SQL Server接着会尝试执行批处理。如果批处理中出现语法错误,整个批处理就不会提交到SQL Server执行。

 

变量是属于定义它们的批处理的局部变量,如果试图引用在其他批处理中定义的变量,SQL Server引擎会提示引用的变量还未定义。

DECLARE @A AS INT = 10;

PRINT @A;

GO

PRINT @A;

GO

 

不能在同一批处理和其他语句同时编译的语句:CREATE DEFAULT,CREATE FUNCTION,CREATE PROCEDURE,CREATE RULE,CREATE SCHEME,CREATE TRIGGER及CREATE VIEW。

IF OBJECT_ID('V_Shop','C') IS NOT NULL DROP TABLE V_Shop

GO

CREATE VIEW V_Shop AS

SELECT * FROM T_Shop

GO

 

如果在同一个批处理中既对数据对象进行了修改,又查询了对象,那么SQL Server可能还不知道架构发生了什么变化,因而无法执行数据处理语句,报告解析错误。这种问题的解决方式是把DDL语句和DML语句分隔到不同的批处理中。

SQL Server2005对Go这个客户端工具,进行了增强,让它可以支持一个正整数参数,表示Go之前的批处理将执行的次数。

CREATE TABLE #T(ID INT IDENTITY)

SET NOCOUNT ON; --防止DML输出影响行数

INSERT INTO #T DEFAULT VALUES
GO 100

SELECT * FROM #T

猜你喜欢

转载自blog.csdn.net/xc917563264/article/details/81503419
今日推荐