插入字符串时附加'?'在SQL Server中

时间:2016-08-03 14:50:55

标签: sql-server string powershell

我正在使用Exchange Web服务从电子邮件中获取文本并将其添加到数据库中。所以我这样开始:

$PropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet(
    [Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties);
$PropertySet.RequestedBodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::Text;

$email_obj = [Microsoft.Exchange.WebServices.Data.EmailMessage]::Bind($service,$itemID);
$email_obj.Load($PropertySet);

#getting rid of replies
$Message = $email_obj.Body.Text -replace '\s+', ' '
if($Message -like "* From: *"){
    $Message = ($Message -split " From: ")[0]
}
if($Message.IndexOf('_') -ne (-1)){
    $Message = $Message.Remove($Message.IndexOf('_'))
}

然后,我在SQL Server中插入电子邮件正文:

$query = "INSERT INTO DB.Table ([ID],[Message],[Sender],[Recipient],[TimeStamp])
     VALUES ($ID,'$Message','$Sender','$Recipient',{0})" -f (Get-TimeStamp)
Invoke-Sqlcmd -Query $query -ServerInstance $server

但是INSERT在作为消息的字符串前面添加了?。尝试在执行INSERT之前格式化字符串,但它没有帮助。找不到任何隐藏的字符,例如\n\r\t\s
只有我从电子邮件正文中获取的字符串才能生成此字符结果

1 个答案:

答案 0 :(得分:1)

解决方案与数据格式有关,就像每个人都说的那样。该列为nvarchar,并且不确切知道我尝试插入的字符串是什么数据格式,但有时会有1个或多个unknown characters。要解决此问题,只需在表格中N添加INSERT前缀,如下所示:

$query = "INSERT INTO DB.Table ([ID],[Message],[Sender],[Recipient],[TimeStamp])
                  VALUES ($ID,N'$Message','$Sender','$Recipient',{0})" -f (Get-TimeStamp)
Invoke-Sqlcmd -Query $query -ServerInstance $server
来自@AaronBertrand的

This article解释了SQL中的数据格式。