SQL语法错误将过程创建为外部过程
问题:如果我将If not exists作为外部名称语句添加到create过程中,我会得到一个语法错误。。。为什么? 如果我分别运行这两个语句,它们都可以正常工作SQL语法错误将过程创建为外部过程,sql,syntax,syntax-error,sqlclr,clrstoredprocedure,Sql,Syntax,Syntax Error,Sqlclr,Clrstoredprocedure,问题:如果我将If not exists作为外部名称语句添加到create过程中,我会得到一个语法错误。。。为什么? 如果我分别运行这两个语句,它们都可以正常工作 IF NOT EXISTS ( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'PriceSum') AND type in (N'P', N'PC') ) CREATE PROCEDURE PriceSum(@sum int OUTPUT
IF NOT EXISTS
(
SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'PriceSum')
AND type in (N'P', N'PC')
)
CREATE PROCEDURE PriceSum(@sum int OUTPUT)
AS EXTERNAL NAME MyFirstUdp.[SQL_CLRdll.MySQLclass].PriceSum
试一试
我认为它不喜欢在
创建过程之前和同一批中的东西。因为创建过程必须是批中的第一条语句
要么先删除进程,要么使用动态SQL
IF NOT EXISTS
(
SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'PriceSum')
AND type in (N'P', N'PC')
)
exec('CREATE PROCEDURE PriceSum(@sum int OUTPUT)
AS EXTERNAL NAME MyFirstUdp.[SQL_CLRdll.MySQLclass].PriceSum')
你也可以颠倒逻辑
IF EXISTS
(
SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'PriceSum')
AND type in (N'P', N'PC')
)
DROP PROCEDURE PriceSum
GO --this ends the batch, so the create statement below is fine
CREATE PROCEDURE PriceSum(@sum int OUTPUT)
AS EXTERNAL NAME MyFirstUdp.[SQL_CLRdll.MySQLclass].PriceSum
GO
IF EXISTS
(
SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'PriceSum')
AND type in (N'P', N'PC')
)
DROP PROCEDURE PriceSum
GO --this ends the batch, so the create statement below is fine
CREATE PROCEDURE PriceSum(@sum int OUTPUT)
AS EXTERNAL NAME MyFirstUdp.[SQL_CLRdll.MySQLclass].PriceSum
GO