如何参数化包含IN具有可变数量参数的子句的查询,比如这个?
SELECT * FROM Tags
WHERE Name IN ('ruby','rails','scruffy','rubyonrails')
ORDER BY Count DESC
Run Code Online (Sandbox Code Playgroud)
在此查询中,参数的数量可以是1到5之间的任何值.
我不希望为此(或XML)使用专用存储过程,但如果有一些特定于SQL Server 2008的优雅方式,我对此持开放态度.
这两个连接都会给我相同的结果:
SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK
Run Code Online (Sandbox Code Playgroud)
VS
SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK
Run Code Online (Sandbox Code Playgroud)
表现或其他方面的陈述是否有任何区别?
不同的SQL实现之间是否有所不同?
使用CROSS APPLY的主要目的是什么?
我已经阅读(模糊地,通过互联网上的帖子),cross apply如果你正在进行分区,那么在选择大型数据集时可以更有效率.(寻找灵感)
我也知道CROSS APPLY 不需要UDF作为右表.
在大多数INNER JOIN查询(一对多关系)中,我可以重写它们以供使用CROSS APPLY,但它们总是给我相同的执行计划.
任何人都可以给我一个很好的例子,告诉我什么时候能有效的CROSS APPLY情况INNER JOIN?
编辑:
这是一个简单的例子,执行计划完全相同.(告诉我一个他们不同的地方,哪里cross apply更快/更有效率)
create table Company (
companyId int identity(1,1)
, companyName varchar(100)
, zipcode varchar(10)
, constraint PK_Company primary key (companyId)
)
GO
create table Person (
personId int identity(1,1)
, personName varchar(100)
, companyId int
, constraint FK_Person_CompanyId foreign key (companyId) references dbo.Company(companyId)
, constraint PK_Person primary key (personId)
) …Run Code Online (Sandbox Code Playgroud) 我有一个带account numbers和的数据库card numbers.我将这些文件与update任何卡号匹配到帐号,以便我只使用帐号.
我创建了一个视图链接表和帐户/卡数据库以返回Table ID相关的帐号,现在我需要更新ID与帐号匹配的记录.
这是Sales_Import表,account number需要更新字段:
LeadID AccountNumber
147 5807811235
150 5807811326
185 7006100100007267039
Run Code Online (Sandbox Code Playgroud)
这是RetrieveAccountNumber表,我需要更新:
LeadID AccountNumber
147 7006100100007266957
150 7006100100007267039
Run Code Online (Sandbox Code Playgroud)
我试过以下,但到目前为止没有运气:
UPDATE [Sales_Lead].[dbo].[Sales_Import]
SET [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber
FROM RetrieveAccountNumber
WHERE [Sales_Lead].[dbo].[Sales_Import]. LeadID =
RetrieveAccountNumber.LeadID)
Run Code Online (Sandbox Code Playgroud)
它将卡号更新为帐号,但帐号被替换为 NULL
我正在尝试将insert一些文本数据放入SQL Server9中的表中.
该文本包括单引号(').
我怎么逃避?
我尝试使用两个单引号,但它给我一些错误.
例如. insert into my_table values('hi, my name''s tim.');
获取SQL Server上特定数据库中所有表的名称的最佳方法是什么?
是否禁用和启用SQL Server支持的外键约束?或者是我唯一的选择drop,然后重新create约束?
我想更新表中的列,在其他表上进行连接,例如:
UPDATE table1 a
INNER JOIN table2 b ON a.commonfield = b.[common field]
SET a.CalculatedColumn= b.[Calculated Column]
WHERE
b.[common field]= a.commonfield
AND a.BatchNO = '110'
Run Code Online (Sandbox Code Playgroud)
但它抱怨:
消息170,级别15,状态1,行2
第2行:'a'附近的语法不正确.
这有什么不对?
我一直在学习函数和存储过程很长一段时间,但我不知道为什么以及何时应该使用函数或存储过程.他们看起来和我一样,也许是因为我对此有点新手.
有人可以告诉我为什么吗?
我已经看到了SQL同时使用!=,并<>为不相等.什么是首选语法,为什么?
我喜欢!=,因为<>让我想起Visual Basic.
sql-server ×10
sql ×7
t-sql ×7
join ×3
sql-update ×2
constraints ×1
cross-apply ×1
delimiter ×1
foreign-keys ×1
inner-join ×1
parameters ×1
performance ×1
select ×1
sql-function ×1