我有一个名为“1098Statement”的视图的数据库我们正在测试用户名为“appuser”的应用程序。
我尝试了以下解决方案来在视图上授予选择权并不断出错:
将用户添加到已在视图上授予选择权的数据库角色
消息 229,级别 14,状态 5,第 2 行 对象“1098Statement”、数据库“mydb”、架构“dbo”的 SELECT 权限被拒绝。
他们都没有工作。
是否有任何人可以提供有关解决此问题的任何指示。
我唯一剩下的想法是检查
为什么
SELECT Barraportfolioname
FROM portfolio
WHERE id IN (SELECT DISTINCT i1.portfolioid
FROM Import i1
LEFT OUTER JOIN Import i2
ON i1.PortfolioID = i2.PortfolioID
AND i2.ImportSetID = 82
WHERE i1.ImportSetID = 83
AND i2.ID IS NULL)
Run Code Online (Sandbox Code Playgroud)
需要 0 秒,而以下查询需要 5 秒。
SELECT DISTINCT p.BarraPortfolioName AS name
FROM Import i1
INNER JOIN Portfolio p
ON p.ID = i1.PortfolioID
LEFT OUTER JOIN Import i2
ON i1.PortfolioID = i2.PortfolioID
AND i2.ImportSetID = 82
WHERE i1.ImportSetID = 83
AND i2.ID IS NULL;
Run Code Online (Sandbox Code Playgroud)
我正在使用 SQL Server。这两个表在查询中使用的所有列上都有索引,即portfolioid、id、importsetid。 …
我有一个带有 FILESTREAM 列的表,它有两个为同一个 FILESTREAM 列指定的唯一约束,即:
ALTER TABLE [dbo].[TableName]
ADD CONSTRAINT [UQ__TableName__33C4988760FC61CA]
UNIQUE NONCLUSTERED ([GUID_Column]);
GO
ALTER TABLE [dbo].[TableName]
ADD CONSTRAINT [UQ__TableName__33C49887145C0A3F]
UNIQUE NONCLUSTERED ([GUID_Column]);
GO
Run Code Online (Sandbox Code Playgroud)
我想删除一个独特的约束,因为它们是重复的。但是,当我尝试删除两个重复约束之一时,我收到以下错误。
具有 FILESTREAM 列的表必须具有非 NULL 唯一 ROWGUID 列。
任何人都知道如何删除两个约束之一?
我想将我的 SQL Server 2005 数据库升级到 SQL Server 2012。在 SQL Server 2005 中,您可以在创建全文目录时设置它的位置。但是在 SQL Server 2012(以及我从在线聊天中推断出的 SQL Server 2008)中,您无法指定位置。
在 SQL Server 2005 中,能够设置此位置很重要,因为出于性能原因,我们将目录放在单独的磁盘上。我知道全文引擎从 SQL Server 2008 开始发生了变化,但我找不到有关目录物理创建位置的信息,以及是否将它们放在单独的磁盘上仍然是最佳做法。
如何在 SQL Server 2008/2012 中设置目录位置?或者不再需要遵循将它们存储在单独磁盘上的最佳实践?
下面的代码似乎可以完成这项工作,但我怀疑它是否足够健壮。
SET serveroutput on
DECLARE
v_isclob PLS_INTEGER;
v_cmd VARCHAR2(4000);
BEGIN
SELECT CASE when exists (select * from USER_TAB_COLUMNS where COLUMN_NAME = 'Column_to_modify' AND TABLE_NAME = 'MyTable' AND DATA_TYPE = 'CLOB') then 1 else 0 end into v_isclob FROM DUAL;
IF v_isclob > 0 THEN
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE MyTable RENAME COLUMN Column_to_modify TO XXX';
EXECUTE IMMEDIATE 'ALTER TABLE MyTable ADD Column_to_modify varchar2(4000)';
EXECUTE IMMEDIATE 'UPDATE MyTable SET Column_to_modify = SUBSTR(XXX, 1, 4000)';
EXECUTE IMMEDIATE 'ALTER TABLE MyTable DROP COLUMN …Run Code Online (Sandbox Code Playgroud) 我正在检查索引的某些列的选择性。
这种“忽略我给你的”行为记录在哪里?
这给出了 4,851,908、4,841,060 和 1,000,052
SELECT
COUNT(*),
COUNT(DISTINCT Col1), COUNT(DISTINCT Col2)
FROM Sometable;
Run Code Online (Sandbox Code Playgroud)
根据 MySQL 扩展,这提供了 4,843,634 个唯一对
SELECT COUNT(DISTINCT Col1, Col2) FROM Sometable
Run Code Online (Sandbox Code Playgroud)
以下是错误的:无论任何填充列或表达式顺序如何,单个 COUNT(DISTINCT colx) 都给出 4,843,634 唯一对计数。
我预期COUNT(DISTINCT Col1) = 4,841,060,和COUNT(DISTINCT Col1) = 1,000,052。
SELECT COUNT(DISTINCT Col1), COUNT(DISTINCT Col2) FROM Sometable
SELECT COUNT(DISTINCT Col2), COUNT(DISTINCT Col1) FROM Sometable
SELECT COUNT(DISTINCT Col1), 1 AS Filler, COUNT(DISTINCT Col2) FROM Sometable
Run Code Online (Sandbox Code Playgroud)
但这再次给出了另一个聚合的正确值(COUNT(*)如上)
SELECT COUNT(DISTINCT Col1), MAX(col1) AS Filler, COUNT(DISTINCT Col2) FROM Sometable
Run Code Online (Sandbox Code Playgroud)
问题,如果不清楚: …
我在两个相同的数据库之间设置了一个对等事务复制集,每个数据库都被两个不同服务器上的不同程序使用。由于我们实现了复制,我一直在表上遇到 PK 冲突,尽管插入语句没有输入主键并让 SQL Server 处理它,但两个程序都会更新。在这种情况下,表名是 Statistics: Violation of PRIMARY KEY 约束 'PK_Statistics'。无法在对象“dbo.Statistic”中插入重复键。
我的插入语句:
INSERT INTO [StackExchange].[dbo].[Statistic]
([UserId]
,[CreateDate]
,[IsError]
,[CustomData]
,[ModuleId]
,[StatisticTypeId])
VALUES
(19,GETDATE(),'true','test replication',1,1)
Run Code Online (Sandbox Code Playgroud)
此外,服务器中的事件查看器充满了冲突数据:
这是我在服务器 2 上经常遇到的错误:
在对等 1(传入)、事务 id 0x000000000031dea3 和对等(空)(在磁盘上)、事务 id(空)之间的对等 2 上检测到“更新-删除”类型的冲突
这是我在服务器 1 上遇到的相同事务错误:
在对等 2(传入)、事务 ID 0x0000000000245950 和对等 1(在磁盘上)、事务 ID 0x000000000031dea3 之间的对等 1 上检测到“删除更新”类型的冲突
在这种情况下,你会建议我做什么?
谢谢!
我尝试连接到 SQL Server 2008,我收到以下错误。
用户 <> 登录失败。原因:无法打开明确指定的数据库。
顺便说一下,我在 Windows Server 2008 64 位企业版上有一个 SQL Server 2008 R2。
谢谢,
在用户分类中,我看到了两种不同的分类:
第一:
和第二个:
DA和DBA 有什么区别?
环境sql server 2005 sp3
我有一个以 INT 作为输入的存储过程。我想在调用存储过程期间将 CHAR 转换为 INT。看来我不能那样做。我在@foo 之前收到语法错误。我没有看到它请有人帮我找到它。非常感谢。
CREATE PROCEDURE testme
@test AS INT
AS
BEGIN
SELECT @TEST
END
DECLARE @foo AS CHAR(6)
set @foo = '11test'
EXEC testMe @test = CAST(Substring(@foo,1,2) as int)
Run Code Online (Sandbox Code Playgroud) sql-server ×4
aggregate ×1
constraint ×1
mysql ×1
oracle ×1
performance ×1
query ×1
replication ×1
security ×1
windows ×1