如何在 T-SQL 中动态使用表类型

sae*_*eid 3 sql-server stored-procedures dynamic exec

我想创建一个带有动态参数的存储过程。这些参数之一是表类型

CREATE TYPE [dbo].[IdTable] AS TABLE ([Id] [int] NULL)
GO

CREATE PROCEDURE [dbo].[SP_deleteCells]
    @table IdTable READONLY,
    @tableName NVARCHAR(50),
    @fieldName NVARCHAR(50),
    @result BIT OUTPUT
AS
    DECLARE @SQL NVARCHAR(500);

    SET @SQL='delete from TBL_CustomerTerminal where ID in (select ID from @table)'
    EXEC (@SQL);

    SET @result = @@ROWCOUNT;
Run Code Online (Sandbox Code Playgroud)

如何在没有错误的情况下执行此代码?现在,我得到:

必须声明表变量“@table”

Sql*_*Zim 5

sp_executesql

exec sp_executesql N'delete from TBL_CustomerTerminal where ID in (select ID from @table)'
  , N'@table dbo.IdTable readonly'  /* parameter declaration for sp_executesql */
  , @table /* pass the parameters */
Run Code Online (Sandbox Code Playgroud)