是否有可能从SQL Server数据库获取存储过程的列表,其中创建/上次更新日期>昨天?
sys.sql_modules似乎没有约会.它必须存储在其他地方.
我有几个需要排序的记录,但字段是varchar.他们使用AZ的英文字母.Z之后它来自AA,AB,AC等...例如:
CREATE TABLE #foo(x VARCHAR(30));
INSERT #foo(x) SELECT 'A'
UNION SELECT 'AA'
UNION SELECT 'Z'
UNION SELECT 'B'
UNION SELECT 'AB'
UNION SELECT 'BB';
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
A
B
Z
AA
AB
BB
Run Code Online (Sandbox Code Playgroud)
我知道我应该使用数字字段并按此排序,但目前我没有这个选项.我正在使用SQL Server,而前端是在Access 2010中的报表上.
在提出另一个问题时,我发现SQL Server(在2005年和2008年都发生过)在处理CASE窗口函数子句中的语句时似乎有奇怪的不一致行为.以下代码给出了错误:
declare @t table (SortColumn int)
insert @t values (1), (2), (3)
declare @asc bit
set @asc = 0
select row_number() over (order by
case when 1=1 then SortColumn end asc,
case when 1=0 then SortColumn end desc) RowNumber
, *
from @t
Run Code Online (Sandbox Code Playgroud)
错误是窗口函数不支持常量作为ORDER BY子句表达式. 我认为这是因为case语句可以评估为NULL,这是一个常量.正如可能预期的那样,此代码也会出现相同的错误:
declare @t table (SortColumn int)
insert @t values (1), (2), (3)
declare @asc bit
set @asc = 0
select row_number() over (order by
NULL …Run Code Online (Sandbox Code Playgroud) SQL Server 2008
目标:生成用于创建已在DB中的sprocs的脚本.每个文件必须是一个脚本.
我知道我可以直接右键单击数据库和"任务>生成脚本",但这不会编写我想要的模板中的sproc脚本.
我需要在您从对象资源管理器中右键单击sproc并将"脚本存储过程为> DROP和CREATE"时获得的相同模板中编写脚本.
这是通过'Tasks> Generate Scripts'得到类似版本的,但主要区别是'Tasks> Generate Scripts'方法通过dbo.sp_executesql命令创建脚本,因为你不能嵌套CREATE PROCEDURE一个IF块的内部
任务>生成生成此:
USE someDB
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'somesproc') AND type in (N'P', N'PC'))
DROP PROCEDURE someSproc
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'someSproc') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'-- =============================================
CREATE PROCEDURE
AS
BEGIN
END
' …Run Code Online (Sandbox Code Playgroud) SQL Server文档在这里说,该table_schema领域information_schema.tables是"不可靠",并且得到一个对象的架构的正确方法是查询sys.objects.
任何人都可以详细说明报告的架构如何以及何时information_schema.tables可能不正确?
在研究我可以在MSDN文章中做的事情时说:
从查询或过程无条件退出.RETURN是立即完成的,可以在任何时候用于退出过程,批处理或语句块.不执行RETURN之后的语句.
文档没有接近我正在研究的具体情况.阅读之后,我意识到我不理解Return语句,并且(更具体地说)" 语句块 " 的定义以及我认为.所以...
究竟什么是t-sql"语句块"?它们是Begin ... End用C#中的括号定义的{ ... },还是完全不同的东西?
谢谢!
我正在学习Column Store索引(Denali CTP3功能)并且知道它使用VertiPaq架构进行数据压缩.我有兴趣知道它是什么,它是如何工作的,它的架构.我在谷歌检查但没有令人满意的结果.任何人都可以详细告诉我它是什么,它是如何工作的,这背后的算法/架构等等.
以及它如何帮助进行数据压缩
我需要将Header和Detail行连接到一个结果集中:
(样本DDL并inserts遵循):
订单:
OrderID OrderDate CurrencyID BuyAmount BuyRate
======= ======================= ========== ========= ========
1 2011-09-01 15:57:00.000 7 12173.60 1.243893
1 2011-09-01 15:57:00.000 9 69.48 1
Run Code Online (Sandbox Code Playgroud)
订单详细信息:
OrderID CurrencyID SellAmount SellRate
======= ========== ========== ========
1 7 10000 1
1 8 12384 0.9638
Run Code Online (Sandbox Code Playgroud)
我希望他们加入OrderID并且CurrencyID:
OrderID CurrencyID BuyAmount BuyRate SellAmount SellRate
======= ========== ========= ======== ========== ========
1 7 12173.60 1.243893 10000 1
1 8 NULL NULL 12384 0.9638
1 …Run Code Online (Sandbox Code Playgroud) 以下是SQL中Soundex代码的示例:
SELECT SOUNDEX('Smith'), SOUNDEX('Smythe');
----- -----
S530 S530
Run Code Online (Sandbox Code Playgroud)
怎么'Smith'变成S530?
在这个例子中,第一个数字是S因为这是输入表达式中的第一个字符,但是如何计算剩余的三个数字?
很少有人问过这个问题,但我仍然无法找到正确的答案或正确的方法来做到这一点:
...
;WITH CTE AS
(
SELECT * FROM ...
)
SELECT *, [dbo].[udf_BetaInv](A, B, C, D) AS 'Loss'
FROM CTE
WHERE (Loss >= @MinRetention)
Run Code Online (Sandbox Code Playgroud)
这不起作用,我无法创建存储过程,显然我不能在WHERE中使用Loss,因为在该范围内不存在.
我想用另一个CTE来包装这个,所以我可以把WHERE放在外面的那个但是似乎不起作用,试过这个:
;WITH CTE AS
(
SELECT * FROM ...
)
SELECT *, [dbo].[udf_BetaInv(A, B, C, D) AS 'Loss'
FROM CTE,
RESULTS AS
(SELECT * FROM CTE)
SELECT *
FROM RESULTS
WHERE (Loss >= @MinRetention)
Run Code Online (Sandbox Code Playgroud)
但它没有在SQL Server中编译,我得到一个错误,'''错误地放在上面的许多行但没有任何关系,如果我删除第二个CTE它工作正常.
我只想避免代码重复,不想在select和in中调用我的[udf_BetaInv]两次.