Necesito un poco de ayuda con el código SQL simple:procedimiento de creación dentro de la sección SI
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
El código anterior simple:
- declara una variable int
- comprueba si dbo.Table_Exists procedimiento existe
- SI NO existe lo crea
Mi problema es el siguiente información de error:
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".
no sé por qué, pero ..
- cuando yo haga 'Crear PROCEDIMIENTO' cuerpo sola funciona
- cuando yo haga toda la sección SI excluyendo 'CREATE PROCEDURE' cuerpo, simple consulta funciona
- cuando ejecuto la sección IF completa incluyendo 'CREAR PROCEDIMIENTO' cuerpo, se produce un error
¿Qué me falta?
Hmm .. ¿Debo prefieren consultar con OBJECT_ID oa través de INFORMATION_SCHEMA? He leído en alguna parte que usar INFORMATION_SCHEMA es una mejor idea. – qlf00n
@dygi: siempre uso OBJECT_ID pero depende de usted. En otro RDBMS usaría 'CREATE or REPLACE', o' CREATE IF NOT EXISTS' de todos modos, así que no se preocupe por la "portabilidad" – gbn
Una cosa más. ¿Es correcta y segura esta modificación? OBJECT_ID (db_name() + N'.dbo.Table_Exists ', N'P') – qlf00n