在本文中,我们将为您详细介绍在SQLServer存储过程中按索引而不是名称访问表的列的相关知识,并且为您解答关于在sqlserver数据库中的疑问,此外,我们还会提供一些关于asp.net–如何在SQ
在本文中,我们将为您详细介绍在SQL Server存储过程中按索引而不是名称访问表的列的相关知识,并且为您解答关于在sql server数据库中的疑问,此外,我们还会提供一些关于asp.net – 如何在SQL Server存储过程中使用逗号分隔(拆分)字符串、pdo 访问SQLSERVER存储过程无法获取结果集、SQL Server在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名、SQL Server存储过程中SELECT 与 SET 对变量赋值的区别的有用信息。
本文目录一览:- 在SQL Server存储过程中按索引而不是名称访问表的列(在sql server数据库中)
- asp.net – 如何在SQL Server存储过程中使用逗号分隔(拆分)字符串
- pdo 访问SQLSERVER存储过程无法获取结果集
- SQL Server在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
- SQL Server存储过程中SELECT 与 SET 对变量赋值的区别
在SQL Server存储过程中按索引而不是名称访问表的列(在sql server数据库中)
目的是计算大量列.我正在阅读游标,但我不知道如何应用它们.
让我解释一下我的问题:
我有一排像:
field_1 field_2 field_3 field_4 ...field_d Sfield_1 Sfield_2 Sfield_3...Sfield_n 1 2 3 4 d 10 20 30 n
我需要计算像(field_1 * field1) – (Sfield_1 * Sfiled_1)/更多…
因此结果存储在表格列中d次.
所以结果是一个d列* d行表.
由于列数是可变的,我正在考虑制作动态sql,在字符串中获取列的名称并拆分我需要的列,但这种方法使问题更难.我认为按索引获取列数可以使生活更轻松.
解决方法
鉴于此,我不得不想知道为什么你的数据结构如你所知.当您尝试提取信息时,架构和问题域之间不匹配的迹象会自行显示.当查询的编写非常繁琐时,表明模式没有正确地为其设计的域建模.
但是,尽管如此,根据你告诉我们的情况,另一种解决方案如下:(我假设field_1 * field1意味着field_1 * field_1或field_1平方或Power(field_1,2) ))
Select 1 As Sequence,field_1 As [Field],Sfield_1 As [SField],Sfiled_1 As [SFiled] Union All Select 2,field_2,Sfield_2,Sfiled_2 ... Union All Select n,field_n,Sfield_n,Sfiled_n
现在您的查询如下:
With Inputs As ( Select 1 As Sequence,Sfiled_1 As [SFiled] Union All Select 2,Sfiled_2 .... ),Results As ( Select Case When Sequence = 1 Then Power( [Field],2 ) - ( [SField] * [SFiled] ) Else 1 / Power( [Field],2 ) - ( [SField] * [SFiled] ) End As Result From Inputs ) Select Exp( Sum( Log( Result ) ) ) From Results
asp.net – 如何在SQL Server存储过程中使用逗号分隔(拆分)字符串
例如,选择的值是星期一,星期二,星期四,7天
我正在转换List<>以逗号分隔的字符串,即
string a= "monday,tuesday,thursday"
现在,我将此值作为字符串传递给存储过程.我想解雇像:
Select * from tblx where days = 'Monday' or days = 'Tuesday' or days = 'Thursday'`
我的问题是:如何在存储过程中分离字符串?
解决方法
下面有例子:
DECLARE @str VARCHAR(500) = 'monday,thursday' CREATE TABLE #Temp (tDay VARCHAR(100)) WHILE LEN(@str) > 0 BEGIN DECLARE @TDay VARCHAR(100) IF CHARINDEX(',',@str) > 0 SET @TDay = SUBSTRING(@str,CHARINDEX(',@str)) ELSE BEGIN SET @TDay = @str SET @str = '' END INSERT INTO #Temp VALUES (@TDay) SET @str = REPLACE(@str,@TDay + ','') END SELECT * FROM tblx WHERE days IN (SELECT tDay FROM #Temp)
pdo 访问SQLSERVER存储过程无法获取结果集
如果存储过程直接访问并返回表,
如select * from table ,是可以得到结果集的,
但如果是用临时表,
如:
select * into #t1 from table1
select * from #t1
则不行,请问大家为什么
回复讨论(解决方案)
我试验过了,只要有into语句存在,则结果都不会获得
php 为防止 SQL攻击,限制一个数据库操纵方法(函数)只允许执行一条 SQL 指令
希望你注意到这一点
如果
select * into #t1 from table1
select * from #t1
是存储过程中的内容
那么他将返回包含两个查询结果的结果集
你需要用 PDOStatement::nextRowset 遍历之
SQL Server在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!
这个问题对于规模稍微大些的项目而言,显得尤其重要了,数据库中如果有几百个存储过程,难道还一个个找不成,即使自己很了解业务和系统,时间长了,也难免能记得住。
如何使用sql语句进行查询呢?
下面就和大家分享下SQL查询的方法:
代码如下:
select distinct name
from syscomments a,sysobjects b
where a.id=b.id and b.xtype='p' and text like '%pro_GetSN%'
上面的蓝色字体部分表示要查询的存储过程的名称。
作者 weizhiai12
SQL Server存储过程中SELECT 与 SET 对变量赋值的区别
感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!
sql Server推荐使用 SET 而不是 SELECT 对变量进行赋值。
当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法。
下表列出 SET 与 SELECT 的区别。请特别注意红色部分。
set | select | |
同时对多个变量同时赋值 | 不支持 | 支持 |
表达式返回多个值时 | 出错 | 将返回的最后一个值赋给变量 |
表达式未返回值 | 变量被赋null值 | 变量保持原值 |
下面以具体示例来说明问题:
create table chinadba1(
userid int,
addr varchar(128)
)
go
insert into chinadba1(userid,addr) values(1,'addr1')
insert into chinadba1(userid,addr) values(2,'addr2')
insert into chinadba1(userid,addr) values(3,'addr3')
go
表达式返回多个值时,使用 SET 赋值
declare @addr varchar(128)
set @addr = (select addr from chinadba1)
/*
--出错信息为
服务器: 消息 512,级别 16,状态 1,行 2
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
*/
go
表达式返回多个值时,使用 SELECT 赋值 declare @addr varchar(128)
select @addr = addr from chinadba1
print @addr --结果集中最后一个 addr 列的值
--结果: addr3
go
表达式未返回值时,使用 SET 赋值 declare @addr varchar(128)
set @addr = '初始值'
set @addr = (select addr from chinadba1 where userid = 4 )
print @addr --null值
go
表达式未返回值时,使用 SELECT 赋值 declare @addr varchar(128)
set @addr = '初始值'
select @addr = addr from chinadba1 where userid = 4
print @addr --保持原值
go
需要注意的是,SELECT 也可以将标量子查询的值赋给变量,如果标量子查询不返回值,则变量被置为 null 值。
此时与 使用 SET 赋值是完全相同的
对标量子查询的概念大家应该都觉得陌生,举个例子就能说明
declare @addr varchar(128)
set @addr = '初始值'
--select addr from chinadba1 where userid = 4 为标量子查询语句
select @addr = (select addr from chinadba1 where userid = 4)
print @addr --null值
go
我们今天的关于在SQL Server存储过程中按索引而不是名称访问表的列和在sql server数据库中的分享就到这里,谢谢您的阅读,如果想了解更多关于asp.net – 如何在SQL Server存储过程中使用逗号分隔(拆分)字符串、pdo 访问SQLSERVER存储过程无法获取结果集、SQL Server在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名、SQL Server存储过程中SELECT 与 SET 对变量赋值的区别的相关信息,可以在本站进行搜索。
本文标签: