【发布时间】:2013-06-19 02:49:01
【问题描述】:
我有一个基于输入参数进行搜索的存储过程。现在出于审计原因,业务需求是将搜索的内容和搜索的对象作为 XML 列保存在 Auditlog 表中。
我在这个例子中简化了我想要做的事情。所有的声明都是我的输入参数。我在我的存储过程中创建 XML 并将其插入到 audit 列中。为了测试这一点,我模拟了行为
DECLARE @LastName varchar(50)
DECLARE @FirstName varchar(50)
DECLARE @RelationShip varchar(50)
DECLARE @CallDate date
DECLARE @CallStartTime time(7)
DECLARE @AdminID int
DECLARE @HomePhone varchar(15) = null
DECLARE @WorkPhone varchar(15) = null
DECLARE @MobilePhone varchar(15) = null
DECLARE @SearchXML xml
DECLARE @UserName varchar(50)
SET @LastName = 'rayan'
SET @FirstName = 'Meg'
SET @RelationShip = 'Friend'
SET @CallDate = (SELECT GETDATE())
SET @CallStartTime = (SELECT CONVERT (time, SYSDATETIME()))
SET @AdminID = 74
SET @HomePhone = null
SET @WorkPhone = null
SET @MobilePhone = null
SET @UserName = 'nojha'
SET @SearchXML =
'<Root>
<CallerInformation>
<LastName>' + @LastName + '</LastName>
<FirstName>' + @FirstName + '</FirstName>
<Relationship>' + @RelationShip + '</Relationship>
<CallDate>' + @CallDate + '</CallDate>
<CallStartTime>' + @CallStartTime + '<CallStartTime/>
<HomePhone>' + @HomePhone + '</HomePhone>
<WorkPhone>' + @WorkPhone + '</WorkPhone>
<WorkPhone>' + @WorkPhone + '<WorkPhone/>
<UserName>' + @UserName + '</UserName>
</CallerInformation>
</Root>'
SELECT @SearchXML
执行此操作时出现两个错误
- 数据类型
varchar和date在add 运算符中不兼容。 - 我认为这是由于日期的一些错误。所以我删除了
CallDate和CallStartTime,看看我是否得到了正确的XML。但是运行上面的查询会返回 null。
有人可以帮我解决这个问题吗?
谢谢 尼哈
【问题讨论】:
-
如果您将一个字符串与
NULL连接在一起 - 您将总是得到NULL。您需要使用ISNULL(@HomePhone, '')将NULL替换为空字符串(并将其应用于可能是NULL的所有 变量) -
很好地处理 null 工作。现在你知道如何处理日期
标签: sql sql-server sql-server-2008