我在 GitHub 上問過這個問題,但我認為我們可以變成一個更通用的問題來更快地獲得一些有用的想法。首先,我在這里運行腳本,這表明我是 db-owner 組的成員。
這是一個名為 AutoEdit 的舊工具的安裝腳本。盡管存在以下問題,但我能夠為特定表打開 AutoAudit 并且它作業正常。
提供的腳本使用我的用戶名將一些存盤的程序存盤在一個模式下,然后稍后嘗試將它們轉移到“審計”模式。AutoEdit 概念和存盤程序都在實際作業,但現在我需要清理它并放入另一個環境。
錯誤是:
找不到物件“pAutoAudit”,因為它不存在或您沒有權限。
它將存盤程序創建為
“公司\myuserid.pAutoAudit”
我添加了兩個列印陳述句來幫助除錯:
-- This is the line of code (the EXEC below) that is causing the issue:
print Concat('@AuditSchema=', @AuditSchema)
SET @Sql = 'ALTER SCHEMA ' quotename(@AuditSchema) ' TRANSFER dbo.pAutoAudit'
print Concat('@Sql=', @Sql)
EXEC (@Sql)
上圖顯示:
@AuditSchema=Audit
@Sql=ALTER SCHEMA [Audit] TRANSFER dbo.pAutoAudit
架構審計存在,它有一個存盤程序:pAutoAuditArchive。
我在這里添加了一個相關問題:SQL Server setting that changed schema from dbo
uj5u.com熱心網友回復:
為了解決這個特定問題,我從 Lauren 的答案中看到了正確的語法,如下所示:
ALTER SCHEMA NewSchema 傳輸 [OldSchema].[TableName]
以下腳本暫時修復了該問題。如果確實有錯誤,我必須更多地研究如何修復原始腳本:
use myDbname
Declare @AuditSchema varchar(32)
Declare @OldSchema varchar(32)
Declare @SQL varchar(max)
Set @AuditSchema = 'Audit'
Set @OldSchema = 'Corp\myuser'
-- ALTER SCHEMA NewSchema TRANSFER [OldSchema].[TableName]
SET @SQL = 'ALTER SCHEMA ' quotename(@AuditSchema) ' TRANSFER ' quotename(@OldSchema) '.pAutoAudit'
print Concat('@SQL=', @SQL)
EXEC (@SQL)
SET @SQL = 'ALTER SCHEMA ' quotename(@AuditSchema) ' TRANSFER ' quotename(@OldSchema) '.pAutoAuditAll'
EXEC (@SQL)
SET @SQL = 'ALTER SCHEMA ' quotename(@AuditSchema) ' TRANSFER ' quotename(@OldSchema) '.pAutoAuditDrop'
EXEC (@SQL)
SET @SQL = 'ALTER SCHEMA ' quotename(@AuditSchema) ' TRANSFER ' quotename(@OldSchema) '.pAutoAuditDropAll'
EXEC (@SQL)
SET @SQL = 'ALTER SCHEMA ' quotename(@AuditSchema) ' TRANSFER ' quotename(@OldSchema) '.pAutoAuditRebuild'
EXEC (@SQL)
SET @SQL = 'ALTER SCHEMA ' quotename(@AuditSchema) ' TRANSFER ' quotename(@OldSchema) '.pAutoAuditRebuildAll'
EXEC (@SQL)
SET @SQL = 'ALTER SCHEMA ' quotename(@AuditSchema) ' TRANSFER ' quotename(@OldSchema) '.pAutoAuditSetTriggerState'
EXEC (@SQL)
SET @SQL = 'ALTER SCHEMA ' quotename(@AuditSchema) ' TRANSFER ' quotename(@OldSchema) '.pAutoAuditSetTriggerStateAll'
EXEC (@SQL)
但是,要修復問題中參考的“AutoEdit”腳本,可以通過將此代碼添加到 AutoEdit 或在 AutoEdit 之前運行它來糾正問題。顯然,它假定您在“dbo”default_schema 中。如果需要,您可能必須在腳本之后將值設定回原始值。
DECLARE @SQL2 VARCHAR(max)
SET @SQL2 = 'ALTER USER ' quotename(current_user) ' WITH DEFAULT_SCHEMA = dbo'
print Concat('@SQL2=', @SQL2)
exec (@SQL2)
當我將它移動到另一個環境時,更好的解決方法是將所有“Create Proc xxxx”更改為“Create Proc dbo.xxxx”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474608.html
上一篇:列'Csv.FolderId'在選擇串列中無效,因為它不包含在聚合函式或GROUPBY子句中
下一篇:查詢以跨多個表進行聚合
