我正在尝试创建一个使用 sp_executesql 的存储过程。我已经仔细观察了很久here,但我看不到我在代码中做错了什么。一般来说,我对存储过程/sql 服务器功能很陌生,所以我猜我错过了一些简单的东西。存储过程更改发生得很好,但是当我尝试运行它时,出现错误。
错误说。
Msg 1087, Level 15, State 2, Line 3
Must declare the table variable "@atableName"
该过程如下所示。
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[sp_TEST]
@tableName varchar(50),
@tableIDField varchar(50),
@tableValueField varchar(50)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQLString nvarchar(500);
SET @SQLString = N'SELECT DISTINCT @aTableIDField FROM @atableName';
EXEC sp_executesql @SQLString,
N'@atableName varchar(50),
@atableIDField varchar(50),
@atableValueField varchar(50)',
@atableName = @tableName,
@atableIDField = @tableIDField,
@atableValueField = @tableValueField;
END
我正在尝试用这样的方式来称呼它。
EXECUTE sp_TEST 'PERSON', 'PERSON.ID', 'PERSON.VALUE'
此示例没有添加任何特殊内容,但我有大量具有类似代码的视图。如果我能让这个存储过程正常工作,我就可以大大减少大量重复代码。
感谢您的帮助。
Edit:我尝试这样做是为了更容易维护。我有多个视图,它们基本上具有完全相同的 sql,只是表名不同。数据被传送到 SQL Server 实例以用于报告目的。当我有一个表,每个人的 ID 包含多行,每行都包含一个值时,我经常需要将它们放在一个单元格中供用户使用。