我为我的 Facebook 应用程序制作了 MS SQL 2014 数据库,该应用程序与朋友一起使用。我在 DB 中为所有用户保留好友,并在应用程序启动时从 Facebook 更新他们。为此,我使用了 MERGE 语句(表变量 @FriendUserIds 包含好友 ID 列表;表 UserFriends 具有聚集主键(UserId、FriendUserId)):
MERGE UserFriends
USING (
SELECT
UserId
FROM @FriendUserIds
) AS source (FriendUserId)
ON UserFriends.UserId = @UserId
AND UserFriends.FriendUserId = source.FriendUserId
WHEN NOT MATCHED BY TARGET
THEN INSERT (UserId, FriendUserId)
VALUES (@UserId, source.FriendUserId)
WHEN NOT MATCHED BY SOURCE
AND UserFriends.UserId = @UserId
THEN DELETE;
Run Code Online (Sandbox Code Playgroud)
问题是查询优化器无法识别它可以在 UserFriends 上使用 INDEX SEEK。它使用 SCAN 代替,我不知道强制 SEEK 的方法。现在,我通过将操作拆分为两个查询(用于添加新朋友的 MERGE 和用于删除不再朋友的 DELETE)来规避该问题,这仍然比单个 MERGE 语句快得多(没有 DELETE 语句的 MERGE 使用 …
我在SQL Server 2012中有一个存储过程,它首先检查数据是否存在,如果存在,则将Output参数设置@Return
为1并运行select查询,如果不存在,则设置@Return
为0并返回不同的select查询.
在测试此存储过程以确保数据准确时,它是完美的并返回我期望的数据.问题在于PHP端在尝试读取它显示的输出参数??t_rrr
时应该显示1或0.我相信问题可能在sqlsrv_query中的预定义常量中,但我似乎无法使其工作.这是我的代码:
PHP:
if(isset($_GET['accno'])) {
$search = $_GET['accno'];
$return = "";
$tsql_callSP = "EXEC Intranet.CustomerSearch @Search=?, @Return=?";
$params = array(
array($search, SQLSRV_PARAM_IN),
array($return, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR),SQLSRV_SQLTYPE_INT),
);
/* Execute the query. */
$stmt = sqlsrv_query( $conn, $tsql_callSP, $params);
if( $stmt === false )
{
echo "EXEC Intranet.CustomerSearch Failed\n";
die( print_r( sqlsrv_errors(), true));
}
while($res = sqlsrv_next_result($stmt))
{
// make sure all result sets are stepped through,
// since the output params may not …
Run Code Online (Sandbox Code Playgroud) 我有一些存储过程,其中正在执行多个查询.为了获得插入的最后一个身份我正在使用IDENT_CURRENT
哪个是因果问题.
我的问题是我可以在T-SQL中使用像C#这样的锁定语句,以便它可以是线程安全的吗?
编辑:我正在使用的代码
INSERT INTO activities
(creator
,title
,description)
VALUES
(@Creator
,@Tile
,@Description)
SET @ActivityId = IDENT_CURRENT('dbo.activities');
INSERT INTO [dbo].activity_cfs
([activity_id],
[cf_id],
[cf_field_name],
[field_key],
[value])
SELECT
@ActivityId,
cf_id,
cf_field_name,
field_key,
value
FROM @ActivityCustomFields
Run Code Online (Sandbox Code Playgroud)
@ActivityCustomFields
是我的临时表.
我试图从一个select语句插入多个表.可能吗?
这是我在这里要做的:
insert into table1 (Name, Address)
insert into table2 (Name, Address)
select Name, Address from MainTable
Run Code Online (Sandbox Code Playgroud) 我必须在SQL Server 2012中运行查询以从表中选择数据.有一个变量@status
.如果此变量为null,则必须返回所有数据(如果为value)
我有一个示例查询
SELECT *
FROM StatusTable
WHERE (Status = IIF(@status IS NULL, status, @status))
Run Code Online (Sandbox Code Playgroud)
当此查询@status
不为null时,此查询正常工作,但是当它为null时,它仅返回status列不为null的行.
样品表:
| id | status | Data |
|----|--------|------|
| 1 | null | a |
| 2 | ok | b |
| 3 | fail | c |
| 4 | fail | d |
| 5 | null | e |
Run Code Online (Sandbox Code Playgroud)
什么时候@status
"失败":
| id | status | Data |
|----|--------|------|
| 3 | fail …
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的表:
City date Person
A 2018/05/01 peter
A 2018/03/01 Jack
B 2018/02/16 TOM
C 2018/03/01 Mike
Run Code Online (Sandbox Code Playgroud)
现在我想找到每个城市最早的人。结果将是
A 2018/03/01 Jack
B 2018/02/16 TOM
C 2018/03/01 Mike
Run Code Online (Sandbox Code Playgroud)
怎么做?