我有一个SQL 2k5 sproc我正在使用.
我需要引用一个UDF来根据一些变量和用户权限来计算价格.我最初尝试过这个,但它没有用,因为我没有引用一个字段......
SELECT dbo.f_GetPrice(model,userid,authType) 'YourPrice', name, description
FROM tblRL_Products
WHERE 'YourPrice' Between @fromPrice AND @toPrice
OR 'YourPrice' IS NULL
Run Code Online (Sandbox Code Playgroud)
所以我修改了这个
SELECT dbo.f_GetPrice(model,userid,authType) 'YourPrice', name, description
FROM tblRL_Products
WHERE dbo.f_GetPrice(model,userid,authType) Between @fromPrice AND @toPrice
OR dbo.f_GetPrice(model,userid,authType) IS NULL
Run Code Online (Sandbox Code Playgroud)
当SQL执行此sproc时,它是为每条记录运行3X的函数还是一次运行它并使用每行其他两个位置的值.
有更有效的方法吗?
编辑
这是Scalar UDF.它需要根据用户授权的类型获取价格,然后一旦我们有合适的价格,我们就需要对其进行计算.这全部存储在授权表中.每个用户都拥有每个产品系列的授权.因此,他们可能对每一行有不同的价格类型和计算,在一次搜索结果调用中返回几十甚至几百行.
在上面的代码中我使用了authType,这是一个旧的调用,我们不再使用该参数了.
ALTER function [dbo].[f_GetPrice]
(
@model uniqueidentifier,
@userID uniqueidentifier
)
returns money
as
begin
Declare @yourPrice money
WITH ProductPrice AS(
SELECT (CASE PriceType
WHEN 'msrp' THEN p.price_msrp
WHEN 'jobber' THEN p.price_jobber
WHEN 'warehouse' THEN p.price_warehouse
WHEN …Run Code Online (Sandbox Code Playgroud) 我们有一个 DevOps 项目,已经使用一年多了,我们需要向团队添加一名新开发人员。我能够将用户添加到组织中,他回复了邀请,并且我已将他添加到贡献者组中。
添加他后,我转到我的项目并打开该项目的团队设置。当我单击“添加”并尝试查找他的名字时,我收到一个旋转的状态图形和“正在加载...”,但它找不到用户。它不会给我错误或“未找到结果”。最终它会重置回来,就像我第一次登陆该页面一样。
我认为这可能是权限问题,因此我删除了组中的现有用户。删除后我尝试重新添加用户但不能。我得到相同的结果。我知道该用户正在使用该项目,并且有权获取代码并签入更改。所以对于原来的新用户来说似乎不是问题。
我的下一步是尝试使用 Azure CLI 来执行此操作,但事实证明 CLI 目前不支持将用户添加到项目,目前仅支持将用户添加到组织。我还搜索了这个特定的错误,但找不到其他人遇到这个问题。
我正在浏览并删除SQL数据库中的重复和冗余索引.
所以,如果我有两个相同的索引,我删除.
如果我有重叠的索引,我删除,例如......
我删除索引1.
那些索引的顺序相同但是有额外的字段呢?
我可以安全地删除索引1吗?
我的猜测不是,但我不确定
我有一个有两个问题的存储过程。
它有 40 个参数。我知道第一条评论是重新设计我的存储过程,使其没有 40 个参数。然而,这是一个带有大标准部分的搜索表单。因此,用户最多可以指定 40 个不同的搜索条件。然后我们将这些值作为参数传递。现在我有一个 40 个参数的存储过程。将它们作为 XML 参数传递并在内部或表参数中解析它是否会更有效(我们仍在运行 SQL 2k5,但正在考虑升级到 2k12)。
我的三个参数是由引号和逗号分隔的 Guid 值的长字符串。基本上,用户会看到一个产品线列表,有时有数百个。然后他们单击想要搜索的内容。我们限制了他们可以检查的行数,只是因为字符串太长,但我们传递了一长串由引号和逗号分隔的 Guid。我知道这不是正确的方法。用于传递像这样的 Guid 值的数组或集合的标准 Trans SQl 模式是什么?40 个领域中,我有 3 个独立领域在做这件事。我们希望更有效地做到这一点,并且能够传递超出当前限制的内容。