标签: t-sql

结合INSERT INTO和WITH/CTE

我有一个非常复杂的CTE,我想将结果插入物理表.

以下是否有效?

INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos 
(
    BatchID,
    AccountNo,
    APartyNo,
    SourceRowID
)       
WITH tab (
  -- some query
)    
SELECT * FROM tab
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用一个函数来创建这个CTE,这将允许我重用.有什么想法吗?

t-sql insert common-table-expression

148
推荐指数
3
解决办法
18万
查看次数

LEFT OUTER JOIN如何返回比左表中存在的更多记录?

我有一个非常基本的LEFT OUTER JOIN来返回左表中的所有结果以及来自更大表的一些附加信息.左表包含4935条记录,但当我将其连接到另一个表时,记录计数明显更大.

据我所知,LEFT OUTER JOIN将返回左表中的所有记录,右表中的匹配记录和任何无法匹配的行的空值,这是绝对的福音,因此我的理解是它应该不可能返回比左表中存在的行更多的行,但它发生的一切都是一样的!

SQL查询如下:

SELECT     SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM         SUSP.Susp_Visits LEFT OUTER JOIN
                      DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum
Run Code Online (Sandbox Code Playgroud)

也许我在语法上犯了一个错误,或者我对LEFT OUTER JOIN的理解是不完整的,希望有人可以解释这是如何发生的?

后记

感谢你们给出了很好的答案,我对LEFT OUTER JOINS的理解现在要好得多,但是有人可以提出一种方法可以修改这个查询,这样我只能获得与左表中存在的记录一样多的记录吗?

此查询纯粹是为了生成报告,而重复的匹配只是简单地混淆了问题.

/后记

sql t-sql sql-server sql-server-2005

146
推荐指数
9
解决办法
18万
查看次数

T-SQL - 具有默认参数的函数

我有这个脚本:

CREATE FUNCTION dbo.CheckIfSFExists(@param1 INT, @param2 BIT = 1 )
RETURNS BIT
AS
BEGIN
    IF EXISTS ( bla bla bla )
        RETURN 1;
    RETURN 0;
END
GO
Run Code Online (Sandbox Code Playgroud)

我想以这种方式在一个过程中使用它:

IF dbo.CheckIfSFExists( 23 ) = 0
    SET @retValue = 'bla bla bla';
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

为程序或函数dbo.CheckIfSFExists提供的参数数量不足.

为什么不起作用?

t-sql function default-parameters

145
推荐指数
3
解决办法
14万
查看次数

用于保存整数列表的SQL变量

我正在尝试调试其他人的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上使用与报表相同的值运行报表查询?

t-sql sql-server variables list reporting-services

145
推荐指数
6
解决办法
29万
查看次数

接受多个Id值的T-SQL存储过程

是否有一种优雅的方法来处理将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)

t-sql sql-server stored-procedures

144
推荐指数
2
解决办法
14万
查看次数

在SQL Server中使用常量1或0表示位

当在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 t-sql sql-server bit

144
推荐指数
4
解决办法
9万
查看次数

MySQL和SQL Server之间的差异

我是一名ASP.NET开发人员,他已经用于Microsoft SQL Server满足我所有的数据库需求(无论是在工作中还是在个人项目中).

我正在考虑为我的一些个人项目试用LAMP堆栈.

MySQL和之间有哪些主要区别SQL Server?使用存储过程是一种常见的做法MySQL吗?

您建议的任何建议或资源可以帮助我切换?

对于那些对两者都有经验的人,是否有任何缺失的功能MySQL

mysql t-sql sql-server

143
推荐指数
8
解决办法
33万
查看次数

如何删除表中特定列的前几个字符?

在SQL中,如何删除表中特定列的值的前4个字符?列名是Student Code,示例值是ABCD123Stu1231.我想从我的表中删除前4个字符以获取所有记录

请指导我

sql t-sql sql-server string

143
推荐指数
9
解决办法
42万
查看次数

如何从SQL Server用户定义的函数报告错误

我正在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 t-sql sql-server user-defined-functions sql-server-2008

143
推荐指数
7
解决办法
6万
查看次数

比较DATETIME和DATE忽略时间部分

我有两个表,其中列[date]是类型DATETIME2(0).

我必须比较他们日期部分(日+月+年)的两个记录,丢弃时间部分(小时+分钟+秒).

我怎样才能做到这一点?

sql t-sql sql-server sql-server-2008 datetime-conversion

140
推荐指数
4
解决办法
23万
查看次数