TSQL从脚本创建/更改存储过程
我已经编写了一个存储过程,需要将其添加到产品更新的SQL脚本中 我曾尝试将其转换为使用sp_executesql,但在尝试运行它时,会在引号周围出现错误。我不确定这件事有什么问题。知道我错过了什么吗 原始存储过程: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
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时使用字符串连接