我发现的只是一个DateFormat我可以选择的预定义列表,就像这样
我记得在 MySQL(还有 PostgeSQL?)你可以定义你的日期格式:
DATE_FORMAT(now(),'&m_%Y') --for 02_2012 etc.
Run Code Online (Sandbox Code Playgroud)
SQL Server 有同样的东西吗?我看到人们必须编写一个函数来做这样的事情,它有内置的吗?
编辑:
我刚刚找到了这个DatePart功能。它可以以月份为数字,但总是返回 1 位数字,即使我使用 datePart(MM, getdate())
[SQL Server 2012 SP2 EE]
为什么以下脚本给我一个与 tempdb 相关的错误?
exec sp_MSForEachDB '
IF ( (select database_id from sys.databases where name = ''?'') > 4)
BEGIN
ALTER AUTHORIZATION ON DATABASE::? TO [sa];
ALTER DATABASE [?] SET RECOVERY SIMPLE;
END'
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
Msg 5058, Level 16, State 1, Line 5
Option 'RECOVERY' cannot be set in database 'tempdb'.
Run Code Online (Sandbox Code Playgroud)
它完成了它应该做的工作。但我想不出错误的原因。我知道 tempdb 的 databaseID 是 2,那么至少它不应该尝试为 tempdb 设置选项。
我正在重命名一些独特的约束以匹配我们的数据库对象命名约定。奇怪的是,有几个多行表值函数返回的表具有唯一约束,如下所示:
CREATE FUNCTION [dbo].[fn_name] (...)
RETURNS @Result
TABLE
(
ID BIGINT PRIMARY KEY,
...
RowNum BIGINT UNIQUE
)
BEGIN
...
RETURN
END
GO
Run Code Online (Sandbox Code Playgroud)
我尝试这样命名它,但不起作用:
CREATE FUNCTION [dbo].[fn_name] (...)
RETURNS @Result
TABLE
(
ID BIGINT PRIMARY KEY,
...
RowNum BIGINT
,CONSTRAINT UC_fn_name_RowNum UNIQUE([RowNum])
)
BEGIN
...
RETURN
END
GO
Run Code Online (Sandbox Code Playgroud)
当它是表变量函数定义的一部分时,是否可以设置唯一约束的名称?
t-sql sql-server-2012 set-returning-functions unique-constraint table-variable
是否可以查询 XML 以查找特定元素是否具有特定值?例如,如果我想查看下面的 XML 在<ContactFName>.
但请注意,元素的位置可能会改变。在某些情况下,它可能在/root/MCTLocations/MCTLocation,或者可能跳到根下,或者出现在其他地方......
并且,是否可以参数化元素名称?
DECLARE @table TABLE (XmlCol XML)
INSERT INTO @table (XmlCol) VALUES ('
<root>
<MCTClientName>John</MCTClientName>
<MCTClientCity>Palm Beach</MCTClientCity>
<MCTLocations>
<MCTLocation>
<Address>1234 Main Street</Address>
<ContactFName>Chris</ContactFName>
<ContactLName>Brandt</ContactLName>
</MCTLocation>
</MCTLocations>
</root>')
SELECT * FROM @table WHERE ??
Run Code Online (Sandbox Code Playgroud) 我有一个场景,我将数据库从一台服务器恢复到另一台服务器。在源服务器上,数据库主密钥 (DMK) 使用密码和服务主密钥 (SMK) 进行加密。当我去将它恢复到新服务器时,行中sys.key_encryptions仍然说它是由 SMK 加密的。但事实并非如此,因为两台服务器之间的 SMK 不匹配。是否有任何编程方式来验证 DMK 确实使用此服务器的SMK 进行了加密?
在 SQL Server 2008 中(但也在 2014 年)。让我们考虑一个具有输出参数的过程。此过程可能会产生错误(并且会在以下示例中产生)。我注意到如果我们在TRY/CATCH块中调用过程,输出参数的行为是不一样的。
例子:
create procedure test_output @result varchar(10) output
as
begin
set @result = 'hello'
raiserror('This is an error', 16,1)
set @result = 'error'
end
Run Code Online (Sandbox Code Playgroud)
如果我们以简单的方式启动程序:
declare @res1 varchar(10)
exec test_output @result = @res1 out
print 'Result is: '+ isnull(@res1, 'empty')
Run Code Online (Sandbox Code Playgroud)
我们得到(我很好):
Msg 50000, Level 16, State 1, Procedure test_output, Line 7 [Batch Start Line 12]
这是一个错误
结果是:错误
如果过程现在在 try/catch 块中:
declare @res2 varchar(10)
declare @error_message varchar(max)
begin try
exec test_output …Run Code Online (Sandbox Code Playgroud) 我正在使用 SQL Server 2014。我想执行EXEC (@remotecmd) AT [server_name];(@remotecmd 是动态 sql 而不是存储过程)到##eapb. 我的代码是
insert into ##eapb
EXEC (@remotecmd) AT [ADSQLDB3S\DEV];
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
链接服务器“server_name”的 OLE DB 访问接口“SQLNCLI11”返回消息“事务管理器已禁用对远程/网络事务的支持。”。
消息 7391,级别 16,状态 2,第 71 行
由于链接服务器“server_name”的 OLE DB 提供程序“SQLNCLI11”无法开始分布式事务,因此无法执行该操作。
如果我删除insert into ##eapb,我没有错误。
链接服务器的RPC Out选项设置为True。
假设我在多个数据库中复制了一个存储过程,并进行了一些修改。而且我想引用存储过程所在的数据库,即使它是在另一个数据库中执行的。
有没有办法检索完整路径 (..) 或以其他方式检索存储过程所在的数据库,而不是当前数据库?
我有一个奇怪的安全问题。我有一个用户在 SQL 2016 服务器上使用 SSMS 18.2。他们是 db_datareader 的成员,但是当他们在 Object Explorer Details 中拉出Row Count列时,它是空白的。尽我所知,它需要 DBO 才能显示行数。
这是一个错误还是故意的?有谁知道是否有较低级别的权限可以提供此行数?我知道有很多其他方法可以获得行数,例如sys.partitions,但是用户坚持认为他们想要使用 OED 窗口。
我在一家公司工作,该公司定期从客户那里接收大型 SQL 数据库备份以用于支持目的。我们支持多个 SQL 版本和排序规则,但目前必须手动确认我们客户端的 SQL 版本,然后才能恢复到正确的 SQL 实例。我想知道是否有办法自动化这个过程。
我期待:
无需完全恢复到可能不正确的 SQL 实例,由于其大小,这需要大量时间。(也许是零碎的恢复?)
sql-server ×9
t-sql ×4
backup ×1
collation ×1
date-format ×1
datetime ×1
dynamic-sql ×1
encryption ×1
instance ×1
parameter ×1
permissions ×1
restore ×1
ssms ×1
tempdb ×1
xml ×1