Я создаю UDF.
Функция успешно создана ТОЛЬКО , если я сам запускаю блок CREATE FUNCTION
.
Если я включаю блок CREATE FUNCTION
внутригораздо больший "полный" сценарий создания БД, я получаю странное сообщение об ошибке, в котором говорится, что использовался неверный тип данных.
(см. блок кода и снимок экрана ниже.)
USE MyDB
, SET ANSI_NULLS
и SET QUOTED_IDENTIFIER
идентичны в обоих случаях и не имеют никакого эффекта.
Это очень странно, поскольку UDTT создается намного раньше в сценарии создания БД без ошибок.Я вижу UDTT в SSMS, так что он явно существует ...
Если я перезапущу полный сценарий создания БД, я, очевидно, получаю кучу сообщений о воссоздании объектов, которые уже существуют - я игнорирую эти сообщенияпотому что это ожидаемо.
Но затем я получаю эту ошибку, которая приводит к сбою создания этой конкретной функции, которая блокирует многие другие создания объектов после нее.
Если я удаляю базу данных и повторно запускаюзавершен сценарий создания базы данных, я не получаю ошибок до этой строки и все еще получаю то же сообщение об ошибке, что этот тип данных недействителен.
Что может быть причиной этого?
Если я хотел «починить»полный сценарий создания БД, с чего мне начать?
USE MyDB
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[Test_FloatToNString] ( )
RETURNS @TestResults TABLE (
[Category] NVARCHAR ( MAX ) NOT NULL ,
[Example] NVARCHAR ( MAX ) NOT NULL ,
[Expected] NVARCHAR ( MAX ) NOT NULL ,
[Actual] NVARCHAR ( MAX ) NOT NULL ,
[CaseSensitive] BIT NOT NULL ,
[Tolerance] NVARCHAR ( MAX ) NOT NULL ,
[Difference] NVARCHAR ( MAX ) NOT NULL ,
[Passed] BIT NOT NULL ,
[Description] NVARCHAR ( MAX ) NOT NULL
)
AS BEGIN
DECLARE @testData [NStringTestData] ; /* Error here, see screenshot below */
INSERT INTO @testData /* etc. */
Вот как выглядит UDTT в полном сценарии создания БД:
USE MyDB
GO
/* ... */
CREATE TYPE [dbo].[NStringTestData] AS TABLE(
[Category] [nvarchar](max) NOT NULL,
[Example] [nvarchar](max) NOT NULL,
[Expected] [nvarchar](max) NOT NULL,
[Actual] [nvarchar](max) NOT NULL,
[CaseSensitive] [bit] NOT NULL,
[Tolerance] [int] NOT NULL,
[Description] [nvarchar](max) NOT NULL
)
GO