我最近发布了一个问题,希望找到一种替代方法来授予开发人员sysadmin特权以使用 sql server 调试器。我发现确实没有可行的解决方案。
我的问题是,为什么sql server 调试器需要 sysadmin 权限?我想了解以这种方式设计它背后的原因。
在开发环境中,开发人员应该能够在不授予系统管理员权限的情况下进行开发活动,例如使用内置调试器工具,而不是被告知使用打印语句等基本上构建自己的调试机制。
SQL Server 拥有如此多的特定角色/任务等的特权,奇怪的是没有看到一个单独的角色/任务,例如只能在开发环境中授予的权限等。
我不认为这个问题是其他问题的重复,因为这个问题不是关于如果你不是系统管理员如何使用调试器,而是这样我可以理解为什么它是这样设计的。
我正在使用 sqlcmd 将表导出到 TSV 文件,但遇到了问题。该表有 16 多万行和大约 55 列。
问题是它没有导出完整的表,但似乎在各个点随机停止(我猜是超时?)每次导出不同数量的行并且每次文件的大小略有不同(表明我没有达到任何行或大小限制)。
我没有使用任何超时开关(意味着使用“只要需要”的默认值)。
这是我的命令(为了简化和说明目的,删除了大多数列):
sqlcmd -U myUsername -P myPassword -S SERVERNAME -d "DBNAME" -Q "SELECT ROW_KEY, ISNULL(CARRIER_ID, ''),ISNULL(CONVERT(VARCHAR(19),ORDER_DATETIME,120),''),ISNULL(HEIGHT, ''),ISNULL(RESIDENTIAL_CHARGE, '') FROM MYTABLE" -o "OUTPUT_FILE.txt" -h-1 -s"|" -W
Run Code Online (Sandbox Code Playgroud)
我想知道它是否与超时或在所有列上使用 ISNULL() 有关(尽管当我在 sql server management studio 中运行查询时,我得到了正确的行数,例如 1600 万+)?
同样,我每次得到大约 4-8 百万行,但从来没有得到全部。我在 sql server 2k5 db 中,并从带有 sql server 2k8 的远程机器运行 sqlcmd。
我在 SQL Server 2008 环境中。
我试图在WHERE子句中使用模式匹配来查找特定列的值包含非字母数字、下划线、破折号、句点或空格字符的行。
这是我的代码和示例数据,但我没有得到预期的结果。
在示例数据中,我想返回第 7、8、9 和 12 行,但我得到的是第 5 行和第 6 行。
如果这不是实现目标的最佳方式,我愿意听取其他方法。
我不在可以实现正则表达式的环境中,因此我的解决方案仅限于开箱即用的功能。
CREATE TABLE PATTERN_TEST
(
ID INT NOT NULL,
STRING NVARCHAR(40) NOT NULL
)
INSERT INTO PATTERN_TEST
SELECT 1, 'string' UNION
SELECT 2, 'STRING' UNION
SELECT 3, 'string space' UNION
SELECT 4, 'STRING SPACE' UNION
SELECT 5, 'string-dash' UNION
SELECT 6, 'string-dash space' UNION
SELECT 7, 'string "otherchar"' UNION
SELECT 8, 'string "other char"' UNION
SELECT 9, '"string"' UNION
SELECT 10, …Run Code Online (Sandbox Code Playgroud) 在学习如何从前一周(例如从前一周的星期一的日期)获取星期几的日期时,我发现以下两个表达式很常见,您可以在其中更改最后一个数字(例如 0=星期一)取决于您想要的那一天:
SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0)
SELECT DATEADD(wk, DATEDIFF(wk, 7, GETDATE()), 0)
Run Code Online (Sandbox Code Playgroud)
2017-05-29当我今天(2017-06-17)运行它时,两者似乎都返回了正确的日期。
我的问题是 - 这是如何工作的?似乎是在数周后6或7数周后1900-01-01?为什么它同时适用于 a6和7?
此外,是否存在需要注意的边缘情况,它可能无法提供预期结果?
我最近一直在听到“反弹数据库”这个词,并对其进行了研究,似乎人们认为它意味着不同的东西。
最近是一个 Oracle DBA 说:
“即使是 DBA 也无法访问该实例,因此我们不得不退回数据库”
有标准定义吗?
在 Oracle 数据库的上下文中,我看到人们使用它来指代正常关机、立即关机或关机中止,然后重新启动。
在 SQL Server 的上下文中是否意味着相同的事情?例如停止服务、重新启动或突然终止服务、重新启动等。
也许在所有情况下,它只是意味着关闭和重新启动数据库(或实例?或服务器?),并且根据上下文,可以通过多种方式实现。
我正在使用 SQL Server 2008,我正在寻找类似ltrim和的函数rtrim它也将删除前导和尾随制表符、双空格、回车、换行等。
有许多函数,但我发现所有函数都有限制,例如将字符串截断为 8000 个字符。例如(根据一些评论):
SQL SERVER – 2008 – 增强的 TRIM() 函数 – 删除尾随空格、前导空格、空格、制表符、回车符、换行符
其中一个评论提出了一个更好的解决方案,但- 1导致incorrect syntax错误,我不知道为什么。
CREATE FUNCTION dbo.SuperTrimLeft(@str varchar(MAX)) RETURNS varchar(MAX)
AS
BEGIN
IF (ASCII(LEFT(@str, 1)) < 33) BEGIN
SET @str = STUFF(@str, 1, PATINDEX('%[^'+CHAR(0)+'-'+CHAR(32)+']%', @str) – 1, ' ');
END;
RETURN @str;
END;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,完成上述任务的最佳方法是什么?
我有一个存储过程,它返回多个记录集以在应用程序中使用。有时,其中一些记录集是空的。
我想减少开销,只返回那些有 1 行或更多行的。
我的问题是 - 我怎样才能只返回那些有行的记录集?
应用程序只需要 0 个或更多记录集,并循环遍历每个记录集,然后将它们打印出来。
我知道我可以在应用程序代码中跳过它们,但我试图阻止它们被返回(如果为空)。
程序很简单:
CREATE PROCEDURE bfsp_PROC_NM
AS
BEGIN
SELECT * FROM TABLE_1
SELECT * FROM TABLE_2
SELECT * FROM TABLE_3
RETURN
END
GO
Run Code Online (Sandbox Code Playgroud)
在实际过程中,有些查询的开销很大,所以我不想测试查询,然后如果它返回一行或更多,再次执行它......因为它太昂贵了。
sql-server ×7
t-sql ×2
datetime ×1
functions ×1
oracle ×1
permissions ×1
sqlcmd ×1
terminology ×1