创建变量,一个存储过程只能创建一个相同名字的变量
DECLARE @[NAME] [TYPE]
规则:name必须英文开头 type (XML varchar int datetime 等)
例:DECLARE @ItemMessage XML
赋值 set @ItemMessage = '<main><dd name="na">1</dd><ff>2</ff><dd name="bu">3</dd></main>'
if ... else begin ... end 用法
对象是XML时候可以使用,
.modify('insert <ORDROWID>00</ORDROWID> as first into (/main)[1]') //注意里面必须是字符串,
[sql] view plain copy
@ItemMessage.modify('insert <ORDROWID>00</ORDROWID> as first into (/main)[1]') //在main下追加ORDROWID节点
set @ItemMessage.modify('replace value of (/main/ORDROWID/text())[1] with sql:variable("@userID")') // 替换main/ORDRROWID 的值
在打印xml对象只能用select 不能 print
获取XML的值
-- 方法1 (只有唯一一个key的时候)
[sql] view plain copy
SELECT @ItemMessage.value('data(/main/ss/text())[1]', 'varchar(30)')
SELECT @ItemMessage.value('data(/main/ss[@Name="bu"])[1]', 'varchar(30)')
-- 方法2
SELECT @ItemMessage.value('(/main/ss/text())[1]',, 'varchar(30)') 原理同上
--方法3 获取所有值但一个表格上
[sql] view plain copy
SELECT C.value('.','varchar(30)') FROM @ItemMessage.nodes('/main/dd/text()') T(C)
SELECT C.value('text()[1]','varchar(30)') FROM @ItemMessage.nodes('/main/dd') T(C)
判断是否存在,if @ItemMessage.exist('main/dd') = 1 存在返回true,否则false
upper([string]),把英文全部变大写的函数
NEWID() 新唯一 的id
GETDATE()当前时间
CONVERT(varchar(12),GETDATE(),111) -----2018/04/02
isnull()是否空值
[sql] view plain copy
执行动态拼凑的sql , exec sp_executesql @dd //***注意@dd必须是@dd nvarchar