相关疑难解决方法(0)

存储过程中的表值参数获取执行权限被拒绝错误

调用具有表值参数作为参数之一的存储过程时,我收到以下错误

EXECUTE对象'ValidationErrors' 的权限被拒绝

ValidationErrors是使用以下语句创建的TVP:

CREATE TYPE [dbo].[ValidationErrors] AS TABLE(
    [ErrorMessage] [varchar](255) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

执行存储过程的用户对存储过程具有执行权限.但是,我仍然得到上述错误.有任何想法吗?

.net sql-server enterprise-library

21
推荐指数
1
解决办法
7158
查看次数

存储过程的SQL Server权限与动态SQL

我有一个具有应用程序角色的数据库.角色成员都属于Active Directory中的组.我没有赋予角色权限以从表中选择,而是赋予角色对其需要调用的所有存储过程的执行权限.

这工作正常,除了我的一个存储过程,它正在构建一些动态SQL并调用sp_executesql.

动态sql看起来像这样:

SET @SQL = N'
SELECT * 
FROM dbo.uvView1 
INNER JOIN uvView2 ON uvView1.Id = uvView2.Id'

EXEC sp_executesql @SQL
Run Code Online (Sandbox Code Playgroud)

此角色的用户无法调用存储过程.它给出了以下错误,我想这是一种预期:

对象'uvView1',数据库'Foobar',架构'dbo'上的SELECT权限被拒绝.

有没有办法让我的用户成功执行此proc而不赋予动态SQL中所有视图的角色权限?

sql sql-server stored-procedures database-security

11
推荐指数
1
解决办法
6230
查看次数

如何使用Dapper在IN子句中使用超过2100个值?

我有一个包含ID的List,我想使用Dapper将其插入到临时表中,以避免对"IN"子句中的参数进行SQL限制.

所以目前我的代码看起来像这样:

public IList<int> LoadAnimalTypeIdsFromAnimalIds(IList<int> animalIds)
{
    using (var db = new SqlConnection(this.connectionString))
    {
        return db.Query<int>(
            @"SELECT a.animalID        
            FROM
            dbo.animalTypes [at]
            INNER JOIN animals [a] on a.animalTypeId = at.animalTypeId
            INNER JOIN edibleAnimals e on e.animalID = a.animalID
            WHERE
            at.animalId in @animalIds", new { animalIds }).ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要解决的问题是,当animalIds列表中有超过2100个ID时,我得到一个SQL错误"传入的请求有太多参数.服务器最多支持2100个参数".

所以现在我想创建一个填充了传递给方法的animalIds的临时表.然后我可以加入临时表上的动物表,避免使用巨大的"IN"子句.

我尝试了各种语法组合,但没有得到任何结论.这就是我现在所处的位置:

public IList<int> LoadAnimalTypeIdsFromAnimalIds(IList<int> animalIds)
{
    using (var db = new SqlConnection(this.connectionString))
    {
        db.Execute(@"SELECT INTO #tempAnmialIds @animalIds");

        return db.Query<int>(
            @"SELECT a.animalID        
            FROM
            dbo.animalTypes [at]
            INNER JOIN animals [a] on a.animalTypeId = …
Run Code Online (Sandbox Code Playgroud)

c# sql-server dapper

6
推荐指数
1
解决办法
3750
查看次数