欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sqlserver存储过程分析

程序员文章站 2022-09-04 16:34:29
创建变量,一个存储过程只能创建一个相同名字的变量 declare @[name]  [type] 规则:name必须英文开头   type (xml varchar i...

创建变量,一个存储过程只能创建一个相同名字的变量

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