SQL查询转换错误

SQL查询转换错误,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,我在T-SQL查询中遇到错误 味精242,第16级,第3状态,第21行 nvarchar数据类型转换为datetime数据类型导致值超出范围 到目前为止,我的问题是这样的 use Test IF OBJECT_ID('tempdb..#MetricsServerUserAudit') IS NOT NULL BEGIN BULK INSERT #MetricsServerUserAudit FROM 'C:\QPR_Logs\Audit\MetricsServerAud

我在T-SQL查询中遇到错误

味精242,第16级,第3状态,第21行
nvarchar数据类型转换为datetime数据类型导致值超出范围

到目前为止,我的问题是这样的

use Test

IF OBJECT_ID('tempdb..#MetricsServerUserAudit') IS NOT NULL
BEGIN   
    BULK INSERT #MetricsServerUserAudit 
    FROM 'C:\QPR_Logs\Audit\MetricsServerAudit.txt'
    WITH (FIRSTROW = 1)             

IF OBJECT_ID('MetricsServerUserAudit') IS NOT NULL
begin
    INSERT INTO dbo.MetricsServerUserAudit(DateStamp, [TIME], [DATE],[USER_LOGIN], [USER_NAME], [MODEL_NAME], [OPERATION], [TARGET_USER],[TARGET_GROUP], [ELEMENT_TYPE_NAME], [ELEMENT_TYPE_PERMISSION], [OBJECT_NAME], [OBJECT_PERMISSION])
        SELECT
            CONVERT(CHAR(10), [DATE], 101) + ' ' + CONVERT(CHAR(11),[TIME], 108) as DateStamp,  
            CONVERT(CHAR(11), [TIME], 108) AS [TIME], 
            CONVERT(CHAR(10), [DATE], 101) AS [DATE],
            [USER_LOGIN], [USER_NAME], [MODEL_NAME], [OPERATION],
            [TARGET_USER], [TARGET_GROUP], 
            [ELEMENT_TYPE_NAME], [ELEMENT_TYPE_PERMISSION],
            [OBJECT_NAME], [OBJECT_PERMISSION]  
        FROM
            dbo.MetricsServerUserAudit 
        WHERE
            LEN([TIME]) = 8 
            AND NOT EXISTS (SELECT * FROM MetricsServerUserAudit)

    drop table #MetricsServerUserAudit
end
end
else
    IF OBJECT_ID('tempdb..#MetricsServerUserAudit') IS NULL
    begin
        CREATE TABLE #MetricsServerUserAudit
        (
            [TIME] nvarchar(max) NOT NULL,
            [DATE] nvarchar(max) NOT NULL,
            [USER_LOGIN] nvarchar(max) NOT NULL,
            [USER_NAME] nvarchar(max) NOT NULL,  
            [MODEL_NAME] nvarchar(max) NOT NULL,
            [OPERATION] nvarchar(max) NOT NULL,
            [TARGET_USER] nvarchar(max) NOT NULL,
            [TARGET_GROUP] nvarchar(max) NOT NULL,
            [ELEMENT_TYPE_NAME] nvarchar(max) NOT NULL,
            [ELEMENT_TYPE_PERMISSION] nvarchar(max) NOT NULL,
            [OBJECT_NAME] nvarchar(max) NOT NULL,
            [OBJECT_PERMISSION] nvarchar(max) NOT NULL  
        )

        BULK INSERT #MetricsServerUserAudit 
        FROM 'C:\QPR_Logs\Audit\MetricsServerAudit.txt'
        WITH (FIRSTROW = 1)

        IF OBJECT_ID('MetricsServerUserAudit') IS NULL
            CREATE TABLE MetricsServerUserAudit
            (
                [DateStamp] DATETIME NOT NULL,
                [TIME] nvarchar(max) NOT NULL,
                [DATE] nvarchar(max) NOT NULL,
                [USER_LOGIN] nvarchar(max) NOT NULL,    
                [USER_NAME] nvarchar(max) NOT NULL,
                [MODEL_NAME] nvarchar(max) NOT NULL,
                [OPERATION] nvarchar(max) NOT NULL,
                [TARGET_USER] nvarchar(max) NOT NULL,   
                [TARGET_GROUP] nvarchar(max) NOT NULL,
                [ELEMENT_TYPE_NAME] nvarchar(max) NOT NULL,
                [ELEMENT_TYPE_PERMISSION] nvarchar(max) NOT NULL,
                [OBJECT_NAME] nvarchar(max) NOT NULL,   
                [OBJECT_PERMISSION] nvarchar(max) NOT NULL
             )

        INSERT INTO MetricsServerUserAudit(DateStamp,[TIME],[DATE],[USER_LOGIN],[USER_NAME],[MODEL_NAME],[OPERATION],[TARGET_USER], [TARGET_GROUP],[ELEMENT_TYPE_NAME],[ELEMENT_TYPE_PERMISSION],[OBJECT_NAME],[OBJECT_PERMISSION])
            select 
                convert(char(10),[DATE],101) + ' ' + convert(char(11),[TIME],108) as DateStamp, 
                convert(char(11),[TIME],108) as [TIME],convert(char(10),[DATE],101) as[DATE],
                [USER_LOGIN], [USER_NAME],
                [MODEL_NAME], [OPERATION], 
                [TARGET_USER], [TARGET_GROUP],
                [ELEMENT_TYPE_NAME], [ELEMENT_TYPE_PERMISSION],
                [OBJECT_NAME], [OBJECT_PERMISSION]  
            from 
                #MetricsServerUserAudit 
            where 
                LEN([TIME]) = 8 
                and not exists (select * from MetricsServerUserAudit)

        drop table #MetricsServerUserAudit
end
他们谈论的第21行是

Insert into MetricsServerUserAudit(DateStamp, [TIME], [DATE], [USER_LOGIN], [USER_NAME], [MODEL_NAME], [OPERATION], [TARGET_USER],  [TARGET_GROUP], [ELEMENT_TYPE_NAME], [ELEMENT_TYPE_PERMISSION], [OBJECT_NAME], [OBJECT_PERMISSION])

有人能解释一下我为什么会犯这个错误吗?这张桌子的设计错了吗?我的问题不对吗?如果有更好的查询方法,请告诉我。我想了解更多。

转换(字符(10),[日期],101)。。。。似乎字符(10)对于101格式的日期来说太小了。。。尝试字符(30)选择转换(字符(10),[日期],101)+''+转换(字符(11),[时间],108)作为日期戳。。。将此转换为日期时间explicitly@ChristophBethge尝试
设置日期格式xxx
其中xxx是
dmy
或您实际使用的任何格式您的日期或时间值没有使用格式“101”或“108”。结果是无法使用该格式将其转换为字符串。请将日期存储为
datetime
数据类型,而不是
varchar
。数据类型的存在是有原因的,请使用适当的数据类型