1

基本的なDML以外でストアドプロシージャとSQLコードを作成する方法を学び始めたところです。私が最近出くわしたものは、テーブル値パラメーターです。TVPを作成するためのスクリプトを見つけました。これは問題なく機能しますが、理解できないことが2つあります。1つは、いつ使用するかです。TVPが有益である場合の典型的な現実世界のシナリオは何ですか。2つ目は、次のスクリプトからとを削除する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
4

1 に答える 1

2

実際の用途の 1 つは、をパラメータ化するinことです。

クエリにフィルターがある場合、カンマ区切りのリストとして渡してから分割するなど、ここでのメソッドのいずれか(x, y, z, ...)に頼る必要はなくなりました。

そこBEGIN ... ENDに違いはありません。ブロックを定義します。たとえば、ステートメントの後にそれを使用して、IF複数のステートメントを 1 つの論理ブロックにまとめることができます。

于 2012-11-28T14:44:42.387 に答える