PHP 本机客户端驱动程序不希望删除使用 SQLCMD 创建的索引



我用SQL脚本创建了一个数据库,这些脚本与SQLCMD一起运行,也与SSMS中的一些脚本一起运行。我在同一个SQL数据库用户下运行它们。

当我想用sqlsrv驱动程序在IIS上运行的PHP脚本删除索引时,我收到了3701错误(索引不存在或权限不足(。我确信索引是存在的。

我将我的SQL数据库用户包括在sysadmin、db_ddladmin和db_owner中。

根据SQL Server关于删除索引的文档,我尝试将ALTER权限授予数据库用户。我尝试了一些我在这个网站上读到的其他赠款,以便能够删除索引。这是我的代码:

GRANT CONTROL ON dbo.minutes_clients TO admin_igreffe
GRANT ALTER (representant) ON dbo.minutes_clients TO admin_igreffe
GRANT CREATE TABLE TO admin_igreffe
GRANT ALTER ON SCHEMA :: dbo TO admin_igreffe

没有什么帮助。我用检查了我桌子上的权限

SELECT * FROM fn_my_permissions('dbo.minutes_clients', 'OBJECT')

我得到了以下结果:

entity_name             subentity_name                      permission_name
----------------------- ----------------------------------- ----------------
dbo.minutes_clients                                         SELECT                            
dbo.minutes_clients                                         UPDATE
dbo.minutes_clients                                         REFERENCES
dbo.minutes_clients                                         INSERT
dbo.minutes_clients                                         DELETE
dbo.minutes_clients                                         EXECUTE
dbo.minutes_clients                                         RECEIVE
dbo.minutes_clients                                         VIEW CHANGE     TRACKING
dbo.minutes_clients                                         VIEW DEFINITION
dbo.minutes_clients                                         ALTER
dbo.minutes_clients                                         TAKE OWNERSHIP
dbo.minutes_clients                                         CONTROL
dbo.minutes_clients     id_minute                           SELECT
dbo.minutes_clients     id_client                           SELECT
dbo.minutes_clients     representant                        SELECT
dbo.minutes_clients     id_minute                           UPDATE
dbo.minutes_clients     id_client                           UPDATE
dbo.minutes_clients     representant                        UPDATE
dbo.minutes_clients     id_minute                           REFERENCES
dbo.minutes_clients     id_client                           REFERENCES
dbo.minutes_clients     representant                        REFERENCES
(21 affected row(s))

我要删除的索引在representant列上。我发现我没有对该特定列的ALTER权限。这是问题所在吗?如何使用SQL脚本做到这一点?

经过2-4天的测试和研究,我找到了解决方案。这个问题与权限无关。我应该发布用于删除索引的SQL查询:

DROP INDEX fki_minutes_clients_representant_fkey ON minutes_clients.representant

这就是问题所在。我的查询没有指向representant列上minutes_clients表的fki_minutes_clients_representant_fkey索引。因此,我得到的错误消息是正确的,但不明确:找不到索引(正确!(或您没有删除此索引的权限(错误!(。

以下是我应该用来删除索引的正确语法:

DROP INDEX minutes_clients.representant

DROP INDEX fki_minutes_clients_representant_fkey ON minutes_clients

希望它对有用

最新更新