【发布时间】:2026-01-17 09:50:01
【问题描述】:
我有几个具有相同结构的表。这些表按年份命名,即 2001、2002 等等。我需要在每个表中的列中搜索一个值并获取每个表的计数。
我在下面创建了一个存储过程,但我一直收到错误
无效的列'lol'
这是使用的存储过程:
CREATE PROCEDURE [dbo].[CountSP]
@TableName NVARCHAR(128),
@SearchParam NVARCHAR(50),
@SearchInput NVARCHAR(200)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N'SELECT COUNT('+QUOTENAME(@SearchParam)+') FROM ' + QUOTENAME(@TableName) +'WHERE'+QUOTENAME(@SearchParam)+'LIKE '+QUOTENAME(@SearchInput)+
+ N' SELECT * FROM '+QUOTENAME(@TableName)
EXECUTE sp_executesql @Sql
END
执行它:
DECLARE @return_value INT
EXEC @return_value = [dbo].[CountSP]
@TableName = N'1999',
@SearchParam = N'USERDESC',
@SearchInput = N'lol'
SELECT 'Return Value' = @return_value
【问题讨论】:
-
注意:直接使用
SysName。QUOTENAME(@TableName) +'WHERE'将是[TableNameYouPassed]WHERE ...+ N' SELECT * FROM '+QUOTENAME(@TableName)在那里做什么? -
“我有几个具有相同结构的表。这些表按年份命名,即 2001,2002 等等” 你的问题就在那里。 您应该有一个带有年份列的表来存储所有这些信息。修复数据库结构是解决问题的方法。任何其他答案都不是解决方案,而是解决方法。话虽如此,我很清楚这样一个事实,很多时候,修复数据库结构不是一种选择 - 所以需要解决方法。
-
@ZoharPeled 正确但在这里不可行。这些表实际上是由我迁移到这里的外部资源提供的数据库
标签: sql sql-server tsql