SQL查询转换错误
我在T-SQL查询中遇到错误 味精242,第16级,第3状态,第21行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
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
。数据类型的存在是有原因的,请使用适当的数据类型