Введите строку в качестве параметра ввода, возвращает сообщение об ошибке «Ошибка преобразования типа данных nvarchar в datetime». - PullRequest
0 голосов
/ 10 июня 2019

У меня проблема с SQL Server, я создал хранимую процедуру с параметрами, указанными ниже:

CREATE PROCEDURE [dbo].[insertTblBatch] 
     (@VoucherNo [NVARCHAR](20),
      @Reference [NVARCHAR](50),
      @VoucherDate [DATETIME],
      @ProductCode [NVARCHAR](30),
      @WareHouse [NVARCHAR](20),
      @Type [CHAR](10),
      @batch [NVARCHAR](50),
      @Factor1 [NVARCHAR](50),
      @Factor2 [NVARCHAR](50),
      @MfgDate [DATETIME],
      @ExpDate [DATETIME],
      @Quantity [FLOAT],
      @LineNo [NUMERIC](18, 0),
      @IsBatch [INT],
      @Flag [INT],
      @Code [NVARCHAR](20),
      @ReplacedFor [NVARCHAR](20),
      @StockOutCostPrice [FLOAT],
      @EngineNo [NVARCHAR](30),
      @LicenseNo [NVARCHAR](30))
AS 
BEGIN
    SET NOCOUNT ON;

    INSERT INTO tblBatchSerialNos ([VoucherNo], [Reference], [VoucherDate],[ProductCode], [WareHouse], [Type], [SerialNo], [Factor1], [Factor2], [MfgDate], [ExpDate], [Quantity], [LineNo], [IsBatch], [Flag], [Code], [ReplacedFor], [StockOutCostPrice], [EngineNo], [LicenseNo]) 
    VALUES (@VoucherNo, @Reference, @VoucherDate, @ProductCode, @WareHouse, @Type, @batch, @Factor1, @Factor2, @MfgDate, @ExpDate, @Quantity, @LineNo, @IsBatch, @Flag, @Code, @ReplacedFor, @StockOutCostPrice, @EngineNo, @LicenseNo)

Пока я пытался ввести «2018.05.16» в качестве ввода для @batch, SQL Server возвращает ошибку

Ошибка преобразования типа данных nvarchar в datetime

Я не могу указать @batch как datetime, потому что ввод не только дата, это может быть 'AA-20' или 'OB-CS004A' и т. Д. @batch является вводом для столбца [SerialNo] тип данных для этого столбца nvarchar(50).

1 Ответ

0 голосов
/ 10 июня 2019

Попробуйте ввести значение в формате ISO 8601 . Может быть преобразовано в тип данных даты.

Например. Формат ГГГГ-ММ-ДД. 2018-05-16

SELECT CAST('2018-05-16' AS DATE) 

Проверьте, является ли @batch значением даты перед вставкой в ​​столбец даты. Вы можете использовать функцию IsDate

DECLARE @batch nvarchar(60) = '2018-05-16'
SELECT ISDATE(@batch) -- 1
SET @batch = 'AA-20'
SELECT ISDATE(@batch) -- 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...