【发布时间】:2017-09-16 01:32:06
【问题描述】:
我想创建一个带有动态参数的存储过程。其中一个参数是表格类型
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;
我怎样才能在没有错误的情况下执行此代码?现在,我得到:
必须声明表变量“@table”
【问题讨论】:
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀! -
你为什么在这里使用动态sql?只需运行 delete 语句,忘记动态 sql。
-
它完全是动态的,但我肯定会替换静态字段来工作
标签: sql-server stored-procedures dynamic exec