我正在尝试调试其他人的SQL报告,并将基础报告查询放入SQL 2012的查询窗口中.
报告要求的参数之一是整数列表.这是通过多选下拉框在报告上实现的.报告的基础查询在where子句中使用此整数列表,例如
select *
from TabA
where TabA.ID in (@listOfIDs)
Run Code Online (Sandbox Code Playgroud)
我不想修改我正在调试的查询,但我无法弄清楚如何在SQL Server上创建一个可以保存此类数据来测试它的变量.
例如
declare @listOfIDs int
set listOfIDs = 1,2,3,4
Run Code Online (Sandbox Code Playgroud)
没有可以保存整数列表的数据类型,那么如何在我的SQL Server上使用与报表相同的值运行报表查询?
是否有一种优雅的方法来处理将id列表作为参数传递给存储过程?
例如,我希望我的存储过程返回的部门1,2,5,7,20.在过去,我已经通过逗号分隔的id列表,如下面的代码,但感觉真的很脏.
我认为SQL Server 2005是我唯一适用的限制.
create procedure getDepartments
@DepartmentIds varchar(max)
as
declare @Sql varchar(max)
select @Sql = 'select [Name] from Department where DepartmentId in (' + @DepartmentIds + ')'
exec(@Sql)
Run Code Online (Sandbox Code Playgroud) 当在select语句中用作字段值时,是否可以将1或0表示为位?
例如
在这种情况下,语句(它是select语句的一部分)ICourseBased的类型为int.
case
when FC.CourseId is not null then 1
else 0
end
as IsCoursedBased
Run Code Online (Sandbox Code Playgroud)
要使它成为一种类型,我必须转换两个值.
case
when FC.CourseId is not null then cast(1 as bit)
else cast(0 as bit)
end
as IsCoursedBased
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方式将值表示为位类型,而不必每次都进行转换?
(我正在使用MS SQL Server 2005)
在SQL Server中,我在表上有一个新列:
ALTER TABLE t_tableName
ADD newColumn NOT NULL
Run Code Online (Sandbox Code Playgroud)
这失败是因为我指定了NOT NULL而没有指定默认约束.该表不应具有默认约束.
为了解决这个问题,我可以使用默认约束创建表,然后将其删除.
但是,似乎没有任何方法可以指定默认约束应该作为此语句的一部分命名,因此我摆脱它的唯一方法是使用一个存储过程在sys.default_constraints中查找它表.
对于可能发生很多事情的操作来说,这有点混乱/冗长.有没有人有更好的解决方案呢?
我试图创建一个表如下,
create table table1(date1 datetime,date2 datetime);
Run Code Online (Sandbox Code Playgroud)
首先我尝试插入如下的值,
insert into table1 values('21-02-2012 6:10:00 PM','01-01-2001 12:00:00 AM');
Run Code Online (Sandbox Code Playgroud)
它说错了,
无法将varchar转换为datetime
然后我尝试下面的格式作为我们的stackoverflow建议的帖子之一,
insert into table1 values(convert(datetime,'21-02-2012 6:10:00 PM',5)
,convert(datetime,'01-01-2001 12:00:00 AM',5));
Run Code Online (Sandbox Code Playgroud)
但我仍然得到错误说,
从字符串转换日期和/或时间时转换失败
有什么建议?
在SQL Server中,这将从Customers表中插入100条记录到tmpFerdeen: -
SELECT top(100)*
INTO tmpFerdeen
FROM Customers
Run Code Online (Sandbox Code Playgroud)
是否可以跨UNION ALL SELECT执行SELECT INTO: -
SELECT top(100)*
FROM Customers
UNION All
SELECT top(100)*
FROM CustomerEurope
UNION All
SELECT top(100)*
FROM CustomerAsia
UNION All
SELECT top(100)*
FROM CustomerAmericas
Run Code Online (Sandbox Code Playgroud)
不太确定在哪里添加INTO子句.
在SQL中,如何删除表中特定列的值的前4个字符?列名是Student Code,示例值是ABCD123Stu1231.我想从我的表中删除前4个字符以获取所有记录
请指导我
我正在SQL Server 2008中编写一个用户定义的函数.我知道函数不能以通常的方式引发错误 - 如果您尝试包含RAISERROR语句SQL返回:
Msg 443, Level 16, State 14, Procedure ..., Line ...
Invalid use of a side-effecting operator 'RAISERROR' within a function.
Run Code Online (Sandbox Code Playgroud)
但事实是,该函数需要一些输入,这可能是无效的,如果是,则函数可以返回没有有意义的值.那我该怎么办?
当然,我可以返回NULL,但是使用该函数的任何开发人员都很难对此进行故障排除.我也可能导致除零或类似的东西 - 这会产生错误信息,但会产生误导性信息.有什么方法可以以某种方式报告我自己的错误消息吗?
我开始学习SQL,我有一本书,提供了一个可供使用的数据库.下面的这些文件位于目录中,但问题是当我运行查询时,它会给我这个错误:
消息5120,级别16,状态101,行1无法打开物理文件"C:\ Murach\SQL Server 2008\Databases\AP.mdf".操作系统错误5:"5(访问被拒绝.)".
CREATE DATABASE AP
ON PRIMARY (FILENAME = 'C:\Murach\SQL Server 2008\Databases\AP.mdf')
LOG ON (FILENAME = 'C:\Murach\SQL Server 2008\Databases\AP_log.ldf')
FOR ATTACH
GO
Run Code Online (Sandbox Code Playgroud)
在书中,作者说它应该有用,但在我的情况下不起作用.我搜索但我不知道究竟是什么问题,所以我发布了这个问题.
sql-server ×10
sql ×6
t-sql ×6
alter-table ×1
bit ×1
constraints ×1
list ×1
mysql ×1
string ×1
variables ×1