1

我正在使用具有我不熟悉的參數語法的存儲過程。SQL參數語法:Declare @Parameter [dbo]。[Table]

CREATE PROC [dbo].[sproc_GetAppSetting] 
    @AppSettingIDs [dbo].[SomeTable] READONLY, 
    @AppSectionID INT, 
    @KeyName varchar(255) 
AS 
SELECT 
    as.AppSettingSettingID, 
    as.Value, 
    as.ConfigID 
FROM 
    AppSetting as WITH(NOLOCK) 
JOIN 
    @AppSettingIDs asIds ON asIds.Val = as.ConfigID 
WHERE 
    as.AppSectionID = @AppSectionID 
    AND as.Status = 'A' 
    AND as.Name = @KeyName 

我的問題是關於行:

@AppSettingIDs [dbo].[SomeTable] READONLY 

似乎這個變量被用作後來的查詢的引用的表:

JOIN 
    @AppSettingIDs asIds ON asIds.Val = as.ConfigID 

[dbo].[SomeTable]在我正在使用的數據庫中不存在。更進一步,當我提取@AppSettingIDs報關行是試圖瞭解什麼是存儲在存儲過程的上下文中的變量外,我得到一個SQL錯誤:

DECLARE @AppSettingIDs [dbo].[SomeTable] 

Msg 2715, Level 16, State 3, Line 1
Column, parameter, or variable #1: Cannot find data type dbo.SomeTable. Parameter or variable '@AppSettingIDs' has an invalid data type.

有人能澄清這個參數聲明在做什麼&我怎麼能夠在存儲過程之外複製它?

+5

這不是一張表;它是一個用戶定義的表類型;如果你有ssms,展開你的數據庫 - >可編程性 - >類型 - >用戶定義的表類型,你應該會看到這個參數定義表有 – techspider

+0

@techspider謝謝,我能夠找到表類型。這應該使我走向正確的方向。 –

回答

1
@AppSettingIDs [dbo].[SomeTable] READONLY 

這意味着您正在使用用戶定義的表類型聲明一個變量。

您的變量@AppSettingIDs可以根據您的需要保存多行。由於變量的結構是用戶定義的表類型的副本,因此該變量的結構與用戶定義的表類型非常相似。

請參閱截圖以查找數據庫中用戶定義表類型的位置。

enter image description here