我刚开始学习如何编写基本DML之外的存储过程和SQL代码。我最近遇到的是表值参数。我找到了一个制作TVP的剧本,它的工作原理很好,但有两件事我不明白。一,何时使用它们。什么是TVP有益的典型现实世界场景。第二,当我从以下脚本中删除begin
和end
时,它是如何工作的;拥有这些关键字之间的区别是什么? SQL Server 2008 R2
use [tempdb]
--this is the database table that will be populated
create table SampleTable
(
id int not null identity (1,1)
,SampleString varchar(50)
,SampleInt int null
)
go
--create the table data type
create type dbo.SampleDataType as table
(
SampleString varchar(50)
,SampleInt int
)
go
--the stored procedure takes the SampleDataType as an input parameter
create proc SampleProc
(
--accepts the TVP as the lone parameter
--make sure that the TVP is readonly
@Sample as dbo.SampleDataType readonly
)
as
begin
--we simply insert the values into the db table from the parameter
insert into SampleTable(SampleString,SampleInt)
select SampleString,SampleInt from @Sample
end
go
--this is the sample script to test that the sproc worked
declare @SampleData as dbo.SampleDataType
insert into @SampleData(SampleString,SampleInt) values ('one',1);
insert into @SampleData(SampleString,SampleInt) values ('two',2);
select * from @SampleData
答案 0 :(得分:2)
一个真实世界的用途是to parameterise an in
clause。
如果查询在(x, y, z, ...)
上有过滤器,则您不再需要诉诸one of the methods here,例如将其作为逗号分隔列表传递,然后将其拆分。
BEGIN ... END
没有区别。它定义了一个块。例如,您可以在IF
语句之后使用它将多个语句组合成一个逻辑块。