2017-05-07 65 views
0

我需要依賴於sys.MSforeach_worker(系統)存儲過程的Msforeach_table存儲過程。 我下面this源代碼來創建存儲過程MSforeach_worker指定的模式名稱「sys」或者不存在,或者您沒有使用它的權限

這裏的語法是「DBO」和「SYS」,所以我已經改變了它不適合於「sys.MSforeach_worker」,從「dbo.MSforeach_worker」 當我嘗試在我的數據庫創建,我得到這個錯誤

指定的架構名稱「SYS」不存在,或者你沒有 必須使用它

許可,當我嘗試創建它在master db中,我得到

在數據庫中創建「主」

我很困惑,我應該運行此腳本在我的SQL Server創建系統存儲過程否認過程的權限。

我已使用Google搜索,但無法找到解決方案,我的問題。

+1

這不是一篇文章,這是一個過程的源代碼。 –

回答

2

首先,不要使用未記錄的系統存儲過程。這些不被支持。

其次,如果這些未公開的proc不存在,則必須使用Azure SQL數據庫。 Azure SQL數據庫在分離主數據庫和用戶數據庫方面具有明顯不同的體系結構。我建議你用你需要的功能創建你自己的proc,而不是試圖移植proc。下面是一個例子。

CREATE PROC dbo.usp_ForEachTable 
    @SQL nvarchar(MAX) 
AS 
DECLARE 
     @SQLBatch nvarchar(MAX) 
    , @TableName nvarchar(261); 
DECLARE tables CURSOR LOCAL FAST_FORWARD FOR 
    SELECT QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + '.' + QUOTENAME(name) 
    FROM sys.tables 
    WHERE is_ms_shipped = 0; 
OPEN tables; 
WHILE 1 = 1 
BEGIN 
    FETCH NEXT FROM tables INTO @TableName; 
    IF @@FETCH_STATUS = -1 BREAK; 
    SET @SQLBatch = REPLACE(@SQL, N'?', @TableName); 
    EXEC sp_executesql @SQLBatch; 
END; 
CLOSE tables; 
DEALLOCATE tables; 
GO 
+0

謝謝@Dan,是的,我正在使用Azure Sql數據庫和我的Laravel應用程序。我正在運行命令「php artisan db:seed」進行數據播種。我將爲數據播種創建自定義proc,然後嘗試使命令使用我的自定義過程。也許這對我有用。 – ismail

相關問題