c# - 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".
解决方案
试试这个:你必须使用动态 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 子句来提高安全性。
推荐阅读
- node.js - 错误“user.findOneAndUpdate 不是函数”但数据已更新
- javascript - 如何使用 lightstep/otel-launcher-node 作为 OpenTelemetry 导出器?
- zsh - 查找与 zsh 关联数组中的值匹配的键?
- mongodb - azure cosmos db 在 mongodb.com 中创建了集合
- asp.net-core - 如何将 AzureAD 配置添加到 AspNetCore 应用程序
- excel - 通过 Excel VBA 将 Xlookup 添加到范围
- c# - c# Console App Giving Error: Index was outside the bounds of the array - 在成功发布后单击 Setup.exe 时
- php - 服务器升级后PHPExcel出错?
- php - 如何使存储在数据库中的自定义字段文本成为wordpress前端的链接
- python - 使用 OpenCV Python 使用模糊水平集进行视网膜流体分割