Sql server 在db.table中插入不同的条目会导致SQL Server中出现隐式转换错误

Sql server 在db.table中插入不同的条目会导致SQL Server中出现隐式转换错误,sql-server,Sql Server,我需要将记录中的新条目插入到主表中,并将标识符的ID映射到主表 例如,考虑下面的例子, -- Insert into Category Master if not exists INSERT INTO tblCategoryMaster (Category, CreatedBy, CreatedDate, U

我需要将记录中的新条目插入到主表中,并将标识符的ID映射到主表

例如,考虑下面的例子,

-- Insert into Category Master if not exists  
INSERT INTO tblCategoryMaster (Category,
                               CreatedBy,
                               CreatedDate,
                               UpdatedBy,
                               UpdatedDate)
SELECT DISTINCT
       (category),
       SERVERPROPERTY('MACHINENAME'),
       GETDATE(),
       SERVERPROPERTY('MACHINENAME'),
       GETDATE()
FROM tblTempDataStaging stg
WHERE category IS NOT NULL
  AND NOT EXISTS (SELECT 1 FROM tblCategoryMaster ctg WHERE ctg.Category = stg.category);
执行select查询后,我们会得到一个不同条目的列表,每次在暂存表中输入一个新条目时,这些条目都会相应地填充到主表中

服务器不允许我插入,这给了我一个错误

Msg 257,第16级,第3状态,第39行
不允许从数据类型sql_variant隐式转换为nvarchar(max)。使用CONVERT函数运行此查询

除日期字段的日期时间外,相关字段的暂存表数据类型为
NVARCHAR(MAX)

尝试使用
CONVERT
方法,但我不确定如何使用图片中的
DISTINCT
方法


您能建议我如何解决此问题吗?

错误告诉您问题:
SERVERPROPERTY('MACHINENAME')
返回数据类型
sql\u variant

SELECT system_type_name
FROM sys.dm_exec_describe_first_result_set(N'SELECT SERVERPROPERTY(''MACHINENAME'') AS MachineName',NULL,NULL);
底层数据类型是一个
nvarchar
(虽然对于机器名来说它肯定不会是2GB的存储空间!),如下所示:

SELECT SQL_VARIANT_PROPERTY(SERVERPROPERTY('MACHINENAME'),'Basetype')
您需要显式转换该值。例如:

CONVERT(nvarchar(256),SERVERPROPERTY('MACHINENAME'))

我建议您更改列的数据类型
CreatedBy
,我假设
UpdatedBy
,从
nvarchar(MAX)
更改为类似于
nvarchar(256)
;您不需要2GB字符(约10亿)来存储该信息。

错误告诉您问题所在:
SERVERPROPERTY('MACHINENAME')
返回数据类型
sql\u variant

SELECT system_type_name
FROM sys.dm_exec_describe_first_result_set(N'SELECT SERVERPROPERTY(''MACHINENAME'') AS MachineName',NULL,NULL);
底层数据类型是一个
nvarchar
(虽然对于机器名来说它肯定不会是2GB的存储空间!),如下所示:

SELECT SQL_VARIANT_PROPERTY(SERVERPROPERTY('MACHINENAME'),'Basetype')
您需要显式转换该值。例如:

CONVERT(nvarchar(256),SERVERPROPERTY('MACHINENAME'))

我建议您更改列的数据类型
CreatedBy
,我假设
UpdatedBy
,从
nvarchar(MAX)
更改为类似于
nvarchar(256)
;您不需要2GB字符(约10亿)来存储这些信息。

谢谢@Larnu,这很有效。我当然不需要2GB的字符。注意!谢谢@Larnu,这很有效。我当然不需要2GB的字符。注意!