首页 > 解决方案 > Sum(column) 的自定义名称,表为变量

问题描述

我有多个表,每个表上都有一个名为“ Balance ”的列,我正在尝试使用接收表作为参数的存储过程来计算该字段的总数。但是当我从管理工作室运行该程序时,它给出了一个错误

我想从我的 c# 应用程序 SqlDataReader 类中将该列读取为 TotalBalance。这是我的程序:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[fut_getTotalBalance]  --futStudentFees
    @tableName varchar(250)
as
begin 
    select sum(balance) AS TotalBalance from @tableName 
    return
end

它不起作用,我不知道我做错了什么。

我得到的错误是:

Msg 1087, Level 16, State 1, Procedure fut_getTotalBalance, Line 7 [Batch Start Line 7]
Must declare the table variable "@tableName".

标签: c#sql-serverstored-procedures

解决方案


试试这个:你必须使用动态 sql 来实现这个

ALTER proc [dbo].[fut_getTotalBalance]  --futStudentFees
    @tableName varchar(250)
    WITH EXECUTE AS 'LimitedUser'
as
begin 
    declare @query varchar(max)
    set @query = 'select sum(balance) AS TotalBalance from '+ QUOTENAME(@tableName)

    exec (@query)
    return
end

LimitedUser SQL Server 帐户(您应该使用非常有限的权限创建该帐户)通过使用 EXECUTE AS 子句来提高安全


推荐阅读