gpt4 book ai didi

sql-server - 在 IF 部分内创建过程

转载 作者:行者123 更新时间:2023-12-02 10:30:41 25 4
gpt4 key购买 nike

我需要一些有关简单 SQL 代码的帮助:

DECLARE @procExists int
SET @procExists = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'dbo' AND ROUTINE_NAME = 'Table_Exists' AND ROUTINE_TYPE = 'PROCEDURE')
IF NOT @procExists > 0
BEGIN
-- test query
-- SELECT 'Something' = @procExists;

-- error throwing code
-- CREATE PROCEDURE Table_Exists
-- @schemaName varchar(50),
-- @tableName varchar(50)
-- AS
-- RETURN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = @schemaName AND TABLE_NAME = @tableName)
END

上面的简单代码:
- 声明一个 int 变量
- 检查过程 dbo.Table_Exists 是否存在
- 如果不存在则创建它

我的问题是这个错误信息:

Msg 156, Level 15, State 1, Line 9
Incorrect syntax near the keyword 'PROCEDURE'.
Msg 137, Level 15, State 2, Line 13
Must declare the scalar variable "@schemaName".

我不知道为什么,但是..
- 当我单独执行“CREATE PROCEDURE”主体时,它可以工作
- 当我执行整个 IF 部分排除'CREATE PROCEDURE'主体时,简单的查询有效
- 当我执行整个 IF 部分包括“CREATE PROCEDURE”主体时,会引发错误

我错过了什么?

最佳答案

CREATE PROCEDURE 必须在它自己的批处理中

所以,动态 SQL 是一种方法:

IF OBJECT_ID('Table_Exists') IS NULL
BEGIN
EXEC ('CREATE PROCEDURE Table_Exists
@schemaName varchar(50),
@tableName varchar(50)
AS
RETURN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = @schemaName AND TABLE_NAME = @tableName)
')
END

或者先删除

IF OBJECT_ID('Table_Exists') IS NOT NULL
DROP PROC Table_Exists
GO
CREATE PROCEDURE Table_Exists
@schemaName varchar(50),
@tableName varchar(50)
AS
RETURN (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = @schemaName AND TABLE_NAME = @tableName)
GO

注意使用 OBJECT_ID 来查看过程是否存在。

关于sql-server - 在 IF 部分内创建过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6306585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com