Sac*_*har 2 sql t-sql sql-server
我只需要修改一个函数.我试过这个:
IF EXISTS(SELECT * FROM Information_schema.Routines
WHERE Specific_schema = 'dbo'
AND SPECIFIC_NAME = 'fnTestFunc'
AND Routine_Type = 'FUNCTION')
BEGIN
ALTER FUNCTION [dbo].[fnTestFunc] (@input VARCHAR(3))
RETURNS VARCHAR(2)
AS
BEGIN
--something
END
END
Run Code Online (Sandbox Code Playgroud)
但显示错误
ALTER FUNCTION必须是批处理中的单个查询
知道这里有什么问题吗?
你必须确保它是在一个单独的批处理中编译和执行的.最简单的方法是通过sp_executesql
:
IF EXISTS(SELECT * FROM Information_schema.Routines WHERE Specific_schema = 'dbo' AND SPECIFIC_NAME = 'fnTestFunc' AND Routine_Type = 'FUNCTION')
BEGIN
EXEC sp_executesql N'ALTER FUNCTION [dbo].[fnTestFunc] (@input VARCHAR(3))
RETURNS VARCHAR(2)
AS BEGIN
--something
END'
END
Run Code Online (Sandbox Code Playgroud)
这也避免了另一个问题 - SQL Server希望在开始执行它之前编译每个批处理.但如果不存在,则无法编译原始批次.您不能使用运行时检查()来避免编译时错误 - 除非您确定,如上所述,在检查完成后进行编译.fnTestFunc
IF
归档时间: |
|
查看次数: |
280 次 |
最近记录: |