1

我刚刚开始学习如何在基本的 DML 内容之外编写存储过程和 SQL 代码。我最近遇到的是表值参数。我找到了一个制作 TVP 的脚本,它工作得很好,但有两件事我不明白。一,何时使用它们。当 TVP 有益时,典型的现实世界场景是什么?二,当我从以下脚本中删除beginand时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
4

1 回答 1

2

一个现实世界的用途是参数化一个in子句

如果查询对您有过滤器,则(x, y, z, ...)不再需要使用此处的一种方法,例如将其作为逗号分隔列表传递,然后将其拆分。

BEGIN ... END那里没有区别。它定义了一个块。例如,您可以在语句之后使用它IF来将多个语句组合成一个逻辑块。

于 2012-11-28T14:44:42.387 回答