小编Aar*_*and的帖子

条件 WHERE 子句

据我所知,我有一个独特的问题。我想知道是否有一种方法可以构造一个查询,其中实际 where 子句本身的存在是有条件的。

我正在编写一个存储过程,我想在其中传递一个过滤器(例如Col1=1 or Col2=3),并且我的查询如下所示:

set @filter = 'Col1=1 or Col2=3' --assume these variables have been declared already
select * from @tbl where @filter --I need to use a table variable
Run Code Online (Sandbox Code Playgroud)

注意:我尝试使用sp_executesqlandsp_sqlexec但都不采用表变量。我还想避免使用if-else声明。请不要建议其中任何一个作为您的答案。:)

sql-server-2005 sql-server condition

3
推荐指数
1
解决办法
2930
查看次数

在 Job Step > Properties 中,只看到两个选项卡:Package 和 Configuration

我正在尝试设置一个执行包的作业步骤以使用 32 位运行时,因为它针对 SQL 2000 数据库使用 SQL 10 驱动程序。该作业在 SQL Server 2012 上运行。我看到了有关如何执行此操作的各种示例,其中作业步骤属性页面有 9 个选项卡(设置值、验证、命令行、常规、配置、命令文件、数据源、执行选项和记录)。执行选项有一个 32 位模式的复选框。

当我查看我的工作步骤时,以管理员身份登录到服务器,以管理员身份运行 SSMS,我看到的只有两个选项卡:PackageConfiguration. 我使用项目部署方法部署了包。我如何让其他标签显示出来?

ssms ssis sql-server-2012

3
推荐指数
1
解决办法
1256
查看次数

TCP 端口和 TCP 动态端口有什么区别?

谁能告诉我有什么区别?

我尝试设置 1 个端口并留下另一个空白也可以工作。我想知道有什么区别,或者我错过了什么?

sql-server sql-server-2012

3
推荐指数
1
解决办法
3万
查看次数

很少更新和很多插入的索引方法

我正在使用带有 *pg_trgm* 扩展名的 Postgresql 9.1。我需要在基于文本的字段上创建索引。我不需要全文搜索,我使用ILIKE查询来进行搜索。

我会用pg_trgm,但不具有太多的经验gingist索引。我会有很多INSERT报表(每天约 15000 条)和很少的UPDATE报表(可能是一周内 1 条或 2 条)。

gin此类表上的索引的索引更新开销是多少?还是gist更合适?

postgresql index index-tuning gist-index gin-index

3
推荐指数
1
解决办法
844
查看次数

我可以为表和存储过程赋予相同的名称吗?

是否可以将存储过程命名为与表相同的名称?我有一个名为“buyers”的现有表,我正在尝试创建一个名为“buyers”的存储过程,但出现此错误:

数据库中已经有一个名为“buyers”的对象。

sql-server-2008 stored-procedures

3
推荐指数
1
解决办法
1万
查看次数

我应该使用强制转换或范围将日期时间加入日期吗?

这个问题是从这里提出的优秀问题中提取出来的:

迄今为止的演员阵容是可以讨论的,但这是一个好主意吗?

就我而言,我不关心该WHERE子句,而是关心加入具有类型列的事件表DATE

一个表有DATETIME2,另一个有DATE......所以我可以有效地JOIN使用aCAST( AS DATE)或者我可以使用“传统”范围查询(>=日期和<日期+1)。

我的问题是哪个更可取?这些DATETIME几乎永远不会与谓词DATE值匹配。

我希望保持在 200 万行DATETIME和 5000行以下DATE(如果这个考虑有所不同)

我是否应该期望在JOIN使用该WHERE子句时具有相同的行为?我应该更喜欢哪个通过缩放来保持性能?答案是否随 MSSQL 2012 而改变?

我的通用用例是将我的事件表视为日历表

SELECT
    events.columns
    ,SOME_AGGREGATIONS(tasks.column)
FROM
    events
LEFT OUTER JOIN
    tasks
        --This appropriately states my intent clearer
        ON CAST(tasks.datetimecolumn AS DATE) = events.datecolumn 
        --But is this more effective/scalable?
        --ON tasks.datetimecolumn >= events.datecolumn 
        --AND tasks.datetimecolumn < DATEADD(day,1,events.datecolumn)
GROUP BY
    events.columns
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2008-r2 sql-server-2012 datetime

3
推荐指数
1
解决办法
3万
查看次数

更改列时会增加大量磁盘空间使用量

我希望这个问题对某人来说很容易回答:)

我有一个看起来像这样的表(隐藏了不重要的列)

CREATE TABLE [dbo].[Log](
    [LogID] [int] IDENTITY(1,1) NOT NULL,
    --several other columns
    [Name] [nvarchar](512) NOT NULL,
 CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED 
(
    [LogID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

现在我对该表做了一些索引,这也涉及将Name-column缩短到 256 宽度。但是当我更改此列时

ALTER TABLE Log ALTER COLUMN Name NVARCHAR(256) NOT NULL
GO
Run Code Online (Sandbox Code Playgroud)

数据库增长了一个不平凡的数量。(是的,我仔细检查了 - 这是我在这里所做的唯一更改)该表总共有 90746 个条目,在更改表之前,SSMS 表示大小为 247.56MB。

但是在这次更新之后,数据库增长到了 336.13MB。

不知道这在这里是否重要,但SELECT @@VERSION得到Microsoft SQL Server …

sql-server database-size alter-table disk-space auto-growth

3
推荐指数
1
解决办法
2373
查看次数

可用性组对于 4 TB 数据是否可行?

目前我们有一个大小为 4 TB 的数据库。我们希望将其放入 2014 年可用性组以扩展读取。该数据库中的数据发生了很大变化。

我有以下问题:

  1. 这个大小是否适合可用性组(我们希望有 2-3 个副本)?
  2. 如果网络中断 1 小时,我们可以多快同步副本?
  3. 在使用可用性组之前,你们有什么我应该遵循的考虑吗?

sql-server scalability availability-groups

3
推荐指数
1
解决办法
257
查看次数

将“ACCOUNTS\”后的字母改为小写?

我有一个数据库表,users具有不同的用户名大小写(参见示例)。如何将字母更新ACCOUNTS\为小写?

ACCOUNTS\James.McAvoy
ACCOUNTS\michael.fassbender
ACCOUNTS\nicholas.hoult
ACCOUNTS\Oscar.Isaac
Run Code Online (Sandbox Code Playgroud)

更新后的期望结果:

ACCOUNTS\james.mcavoy
ACCOUNTS\michael.fassbender
ACCOUNTS\nicholas.hoult
ACCOUNTS\oscar.isaac
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql update

3
推荐指数
1
解决办法
54
查看次数

从不同数据库中的 sys.columns 中提取数据

我在服务器上的一个实例上运行以下内容:

SELECT c.*
FROM sys.columns c
WHERE c.object_id = OBJECT_ID(@tablename);
Run Code Online (Sandbox Code Playgroud)

一切都很好。

我想运行相同的语句,但将其指向服务器上的另一个数据库。

数据库名.dbo.表名

我已经尝试了以下(和其他变体),但它不起作用。

SELECT c.*
FROM sys.columns c
WHERE c.object_id = OBJECT_ID('databaseName.dbo.tablename');
Run Code Online (Sandbox Code Playgroud)

有没有办法从另一个数据库获取一个数据库的列信息?

代码:

SELECT @SQL = @SQL + 'INSERT INTO myTable 
  (ColumnName,ColumnValue,SID,SName,RID,RName)
  VALUES (''' + QUOTENAME(c.name) + ''',NULL,0,NULL,0,NULL);'
            FROM sys.columns c
            WHERE c.object_id = OBJECT_ID(@tablename);

EXEC(@SQL);
Run Code Online (Sandbox Code Playgroud)

有没有办法动态地做到这一点?如果我有一个@DBName我正在传递的参数。

sql-server

3
推荐指数
2
解决办法
5565
查看次数