SQLSERVER
变量声明有两种方式
1.set @aa='123'
2.select @aa = a from TABLE_NAME
游标声明有三种方式
这里是while循环语句
cursor游标的状态 用@@FETCH_STATUS 来进行表示
@@fetch_status是全局变量
是全局变量
@@fetch_status是MicroSoft SQL SERVER的一个全局变量
其值有以下三种,分别表示三种不同含义:【返回类型integer】
0 FETCH 语句成功
-1 FETCH 语句失败或此行不在结果集中
-2 被提取的行不存在
@@fetch_status值的改变是通过fetch next from实现的
“FETCH NEXT FROM Cursor”
面的示例用 @@FETCH_STATUS 控制在一个 WHILE 循环中的游标活动。
DECLARE Employee_Cursor CURSOR FOR --声明
SELECT LastName, FirstName FROM Northwind.dbo.Employees
OPEN Employee_Cursor --打开游标才能生效
FETCH NEXT FROM Employee_Cursor --赋值
--循环开始
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor
END
--循环结束
CLOSE Employee_Cursor --关闭游标
DEALLOCATE Employee_Cursor --销毁游标
如果是sqlserver:用convert或者cast 进行类型装换
随机数可以用right('00000000' + cast(cast(rand(checksum(newid()))*10000000 as int) as varchar),8)这个生成
SELECT NEWID() 36位随机数
SELECT REPLACE(CAST(CAST(NEWID()AS BINARY(10)) + CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER),'-','') 32位随机数
存储过程可以动态生成游标,但不可动态声明变量,且语句的类型需要为NVARCHAR
{CONVERT(CHAR(6),DATEADD(month,-1,'20180925'),112)
DECLARE @v_COLUMN_SQL NVARCHAR(4000),
SET @v_COLUMN_SQL='DECLARE cur1 CURSOR FOR SELECT distinct '+@v_COLUMN_NAME +' FROM TABLE_NAME WHERE SUBSTRING(DATE,1,6) =CONVERT(CHAR(6),DATEADD(month,-1,'''+@v_NOW_DATE+'''),112)'
}
存储过程中判断为空使用is null不应使用=null
if @v_COLUMN_SQL is null 对的
if @v_COLUMN_SQL = null 查不到值
列转行语句
select stuff(( select ','+COLUMN_NAME from TABLE_NAME for xml path('')),1,1,'')
存储过程异常的简单处理
https://blog.youkuaiyun.com/whuarui2010/article/details/7768414