2017-05-07 34 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

相关问题