【发布时间】:2019-03-30 14:42:11
【问题描述】:
我构建了一个过程,它接收带有表名的参数,并将新数据插入到该表中。
CREATE PROCEDURE sp_Ins
@tabela NVARCHAR(80)
AS
INSERT INTO @tabela (CustomerID, CustomerPW)
VALUES (1, '123')
GO
CREATE PROCEDURE SP1
@tabela NVARCHAR(80)
AS
EXEC sp_Ins @tabela
GO
EXEC SP1 'CustomerPW'
但我收到了这条消息:
必须声明表变量@tabela
如何声明接收到的参数以将参数识别为表?
【问题讨论】:
-
不能插入代表表格的变量。您要么需要使用 if 语句来选择正确的插入语句,要么使用动态 SQL。
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀!
标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2012