Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL从脚本创建/更改存储过程_Sql_Sql Server 2008_Tsql_Stored Procedures - Fatal编程技术网

TSQL从脚本创建/更改存储过程

TSQL从脚本创建/更改存储过程,sql,sql-server-2008,tsql,stored-procedures,Sql,Sql Server 2008,Tsql,Stored Procedures,我已经编写了一个存储过程,需要将其添加到产品更新的SQL脚本中 我曾尝试将其转换为使用sp_executesql,但在尝试运行它时,会在引号周围出现错误。我不确定这件事有什么问题。知道我错过了什么吗 原始存储过程: CREATE PROCEDURE spPortalAttachmentLookupDatabases AS BEGIN SET NOCOUNT ON; CREATE TABLE #tmpDatabases ( DatabaseName nva

我已经编写了一个存储过程,需要将其添加到产品更新的SQL脚本中

我曾尝试将其转换为使用sp_executesql,但在尝试运行它时,会在引号周围出现错误。我不确定这件事有什么问题。知道我错过了什么吗

原始存储过程:

CREATE PROCEDURE spPortalAttachmentLookupDatabases
AS
BEGIN
    SET NOCOUNT ON;

    CREATE TABLE #tmpDatabases
    (
        DatabaseName nvarchar(255)
    )

    EXEC sp_Msforeachdb 'use [?];INSERT INTO #tmpDatabases 
                                SELECT ''?'' AS DatabaseName
                                    FROM sys.columns c
                                        inner join sys.objects  o on c.object_id=o.object_id
                                    WHERE ''?'' NOT IN (''master'',''msdb'',''tempdb'',''model'',''test'',''ReportServer'') AND o.Name = ''AI00'' AND c.Name = ''LookupGuid''
                                    ORDER BY o.name,c.column_id'
    SELECT * FROM #tmpDatabases

    DROP TABLE #tmpDatabases
END
GO

DROP PROCEDURE spPortalAttachmentLookupDatabases
脚本:

DECLARE @SQLCmd as nvarchar(max)
/****** Object:  View [dbo].[spPortalAttachmentLookupDatabases]    Script Date: 14/07/2014 09:16:16 ******/
IF NOT EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'spPortalAttachmentLookupDatabases') AND type IN ( N'P', N'PC' ) ) 
    SET @SQLCmd = '
CREATE PROCEDURE spPortalAttachmentLookupDatabases
AS
BEGIN
    SET NOCOUNT ON;

    CREATE TABLE #tmpDatabases
    (
        DatabaseName nvarchar(255)
    )

    EXEC sp_Msforeachdb ''''INSERT INTO #tmpDatabases 
                                SELECT ''?'' AS DatabaseName
                                    FROM sys.columns c
                                        inner join sys.objects  o on c.object_id=o.object_id
                                    WHERE ''?'' NOT IN (''master'',''msdb'',''tempdb'',''model'',''test'',''ReportServer'') AND o.Name = ''AI00'' AND c.Name = ''LookupGuid''
                                    ORDER BY o.name,c.column_id''''
    SELECT * FROM #tmpDatabases

    DROP TABLE #tmpDatabases'
ELSE
    SET @SQLCmd = '
ALTER PROCEDURE spPortalAttachmentLookupDatabases
AS
BEGIN
    SET NOCOUNT ON;

    CREATE TABLE #tmpDatabases
    (
        DatabaseName nvarchar(255)
    )

    EXEC sp_Msforeachdb ''''INSERT INTO #tmpDatabases 
                                SELECT ''?'' AS DatabaseName
                                    FROM sys.columns c
                                        inner join sys.objects  o on c.object_id=o.object_id
                                    WHERE ''?'' NOT IN (''master'',''msdb'',''tempdb'',''model'',''test'',''ReportServer'') AND o.Name = ''AI00'' AND c.Name = ''LookupGuid''
                                    ORDER BY o.name,c.column_id''''
    SELECT * FROM #tmpDatabases

    DROP TABLE #tmpDatabases'

EXEC sp_executesql @SQLCmd
GO
错误:

Msg 102,15级,状态1,程序SPPortalAttachmentLookUpdateBases,第130行 附近的语法不正确

Msg 102,15级,状态1,程序SPPortalAttachmentLookUpdateBases,第133行 “tmpDatabases”附近的语法不正确


出现语法错误。现在就试试吧:

DECLARE @SQLCmd as nvarchar(max)

/****** Object:  View [dbo].[spPortalAttachmentLookupDatabases]    Script Date: 14/07/2014 09:16:16 ******/

IF NOT EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'spPortalAttachmentLookupDatabases') AND type IN ( N'P', N'PC' ) )

    SET @SQLCmd = '

CREATE PROCEDURE spPortalAttachmentLookupDatabases
AS
BEGIN
    SET NOCOUNT ON;

    CREATE TABLE #tmpDatabases
    (
        DatabaseName nvarchar(255)
    )

    EXEC sp_Msforeachdb ''INSERT INTO #tmpDatabases
                                SELECT  ''''?'''' AS DatabaseName
                                    FROM sys.columns c
                                        inner join sys.objects  o on c.object_id=o.object_id
                                    WHERE ''''?'''' NOT IN (''''master'''',''''msdb'''',''''tempdb'''',''''model'''',''''test'''',''''ReportServer'''') 
                                    AND o.Name = ''''AI00'''' AND c.Name = ''''LookupGuid''''
                                    ORDER BY o.name,c.column_id''
    SELECT * FROM #tmpDatabases
    DROP TABLE #tmpDatabases

    END'

ELSE
    SET @SQLCmd = '

ALTER PROCEDURE spPortalAttachmentLookupDatabases
AS
BEGIN
    SET NOCOUNT ON;

    CREATE TABLE #tmpDatabases
    (
       DatabaseName nvarchar(255)
    )

    EXEC sp_Msforeachdb ''INSERT INTO #tmpDatabases
                                SELECT ''''?'''' AS DatabaseName
                                    FROM sys.columns c
                                        inner join sys.objects  o on c.object_id=o.object_id
                                    WHERE ''''?'''' NOT IN (''''master'''',''''msdb'''',''''tempdb'''',''''model'''',''''test'''',''''ReportServer'''') 
                                    AND o.Name = ''''AI00'''' AND c.Name = ''''LookupGuid''''
                                    ORDER BY o.name,c.column_id''
    SELECT * FROM #tmpDatabases
    DROP TABLE #tmpDatabases

    END'
EXEC sp_executesql @SQLCmd
GO

您更新的编辑不起作用。order By之后没有结束引号,查询结果才返回?如果您使用的是SQL Server Management Studio,则始终可以使用它生成过程的脚本,如果没有,则使用下拉和创建选项EXISTS@RdPC这是行不通的,因为我遇到的问题是在使用sp_executesql时使用字符串连接