Sql server TSQL将XML类型设置为NULL(如果变量为空)
我有一个存储过程,它依赖于Sql server TSQL将XML类型设置为NULL(如果变量为空),sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我有一个存储过程,它依赖于IF@awardEmployees不为NULL的语句 我在顶部定义了变量: @awardEmployees XML = NULL 在陈述之前,我试图设定: SET @awardEmployees = NULLIF(@awardEmployees, '') 将返回错误: 在equal to运算符中,数据类型xml和varchar不兼容 我的代码根据搜索字段中是否输入了任何内容发送XML字符串或空字符串,因此,如果该字段为空,我将尝试将其设置为NULL 还有其他方法可以
IF@awardEmployees不为NULL的语句
我在顶部定义了变量:
@awardEmployees XML = NULL
在陈述之前,我试图设定:
SET @awardEmployees = NULLIF(@awardEmployees, '')
将返回错误:
在equal to运算符中,数据类型xml和varchar不兼容
我的代码根据搜索字段中是否输入了任何内容发送XML字符串或空字符串,因此,如果该字段为空,我将尝试将其设置为NULL
还有其他方法可以做到这一点吗 使用exist exist()方法-如果返回空结果,它将返回0,表示False:
declare @awardEmployees XML = '<employees><employee><empID>1234</empID></employee></employees>'
IF @awardEmployees.exist('/employees/employee') > 0
BEGIN
print '@awardEmployees IS NOT NULL'
END
ELSE
BEGIN
print '@awardEmployees IS NULL'
END
declare @awardEmployees2 XML = ''
IF @awardEmployees2.exist('/employees/employee') > 0
BEGIN
print '@awardEmployees2 IS NOT NULL'
END
ELSE
BEGIN
print '@awardEmployees2 IS NULL'
END
declare@awardEmployees XML='1234'
如果@awardEmployees.exist('/employees/employees')>0
开始
打印“@awardEmployees不为空”
结束
其他的
开始
打印“@awardEmployees为空”
结束
声明@awardEmployees2 XML=''
如果@awardEmployees2.exist('/employees/employees')>0
开始
打印“@awardEmployees2不为空”
结束
其他的
开始
打印“@awardEmployees2为空”
结束
请参阅。这有用吗?设置@awardEmployees=NULLIF(将@awardEmployees转换为varchar(max)),“”),这似乎很有效!谢谢:)我的XML是1234
。所以:如果@awardEmployees.exist(“/employees/employees”)不是空的
?@SBB是的,这是我的理解。但是您的XML中有一个输入错误。应该是这样的,毕竟这可能不起作用-@awardEmployees
将永远不会为空,因为它将作为空字符串传递给SPI,并且SPI已将其更改为检查返回值是否大于0。如果返回空结果,exist()将返回0,表示False。