尝试执行单个布尔NOT操作,似乎在MS SQL Server 2005下,以下块不起作用
DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = NOT @MyBoolean;
SELECT @MyBoolean;
Run Code Online (Sandbox Code Playgroud)
相反,我越来越成功了
DECLARE @MyBoolean bit;
SET @MyBoolean = 0;
SET @MyBoolean = 1 - @MyBoolean;
SELECT @MyBoolean;
Run Code Online (Sandbox Code Playgroud)
然而,这似乎是一种扭曲的方式来表达像否定一样简单的东西.
我错过了什么吗?
如何在SQL Server的存储过程中转义字符串,以便在LIKE表达式中使用它是安全的.
假设我有一个NVARCHAR像这样的变量:
declare @myString NVARCHAR(100);
Run Code Online (Sandbox Code Playgroud)
我想在LIKE表达式中使用它:
... WHERE ... LIKE '%' + @myString + '%';
Run Code Online (Sandbox Code Playgroud)
如何在T-SQL中转义字符串(更具体地说,对LIKE模式匹配有意义的字符,例如%或?),以便以这种方式使用它是安全的?
例如,给定:
@myString = 'aa%bb'
Run Code Online (Sandbox Code Playgroud)
我想要:
WHERE ... LIKE '%' + @somehowEscapedMyString + '%'
Run Code Online (Sandbox Code Playgroud)
匹配'aa%bb','caa%bbc'但不是'aaxbb'或'caaxbb'.
以下查询不会更新datetime字段:
update table
SET EndDate = '2009-05-25'
WHERE Id = 1
Run Code Online (Sandbox Code Playgroud)
我也尝试过没有破折号,但这也不起作用.
DELETE from Table WHERE Date > GETDATE();
Run Code Online (Sandbox Code Playgroud)
GETDATE()包括时间.而不是得到
2011-01-26 14:58:21.637
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到:
2011-01-26 00:00:00.000
Run Code Online (Sandbox Code Playgroud) 我datetime在SQL Server中有一个列,它给我这样的数据10/27/2010 12:57:49 pm,我想查询这个列,但只是让SQL Server返回日月和年 - 例如.2010 10 27或类似的东西.
我应该研究哪些功能?
我应该尝试转换为其他日期数据类型吗?或者只是将其转换为字符串?
在MS SQL 2000和2005中,给定日期时间,例如'2008-09-25 12:34:56',获得仅包含'2008-09-25'的日期时间的最有效方法是什么?
这里重复一遍.
在SQL Server 2005中,我试图弄清楚为什么我无法在表中插入多个字段.以下查询,插入一条记录,工作正常:
INSERT INTO [MyDB].[dbo].[MyTable]
([FieldID]
,[Description])
VALUES
(1000,N'test')
Run Code Online (Sandbox Code Playgroud)
但是,以下查询(指定多个值)将失败:
INSERT INTO [MyDB].[dbo].[MyTable]
([FieldID]
,[Description])
VALUES
(1000,N'test'),(1001,N'test2')
Run Code Online (Sandbox Code Playgroud)
我收到这条消息:
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ','.
Run Code Online (Sandbox Code Playgroud)
当我在SQL Sever Management Studio中查找INSERT的帮助时,他们的一个示例显示了我使用的"值"语法(括号中的值组并用逗号分隔).我在SQL Server Management Studio中找到的帮助文档看起来就像是SQL Server 2008,所以也许这就是插入不起作用的原因.无论哪种方式,我都无法弄清楚为什么它不起作用.
我运行以下查询:
SELECT
orderdetails.sku,
orderdetails.mf_item_number,
orderdetails.qty,
orderdetails.price,
supplier.supplierid,
supplier.suppliername,
supplier.dropshipfees,
cost = (SELECT supplier_item.price
FROM supplier_item,
orderdetails,
supplier
WHERE supplier_item.sku = orderdetails.sku
AND supplier_item.supplierid = supplier.supplierid)
FROM orderdetails,
supplier,
group_master
WHERE invoiceid = '339740'
AND orderdetails.mfr_id = supplier.supplierid
AND group_master.sku = orderdetails.sku
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
消息512,级别16,状态1,行2子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.
有任何想法吗?
我想写下面的查询:
SELECT ..., MIN(SomeBitField), ...
FROM ...
WHERE ...
GROUP BY ...
Run Code Online (Sandbox Code Playgroud)
问题是,SQL Server不喜欢它,当我想计算位字段的最小值时它返回错误Operand data type bit is invalid for min operator.
我可以使用以下解决方法:
SELECT ..., CAST(MIN(CAST(SomeBitField AS INT)) AS BIT), ...
FROM ...
WHERE ...
GROUP BY ...
Run Code Online (Sandbox Code Playgroud)
但是,有更优雅的东西吗?(例如,可能存在一个我不知道的聚合函数,它会评估and字段中位值的逻辑.)
我想知道SELECT WITH (NOLOCK)如果影响该表的唯一其他查询是SELECT查询,在表上使用的好处是什么.
这是如何由SQL Server处理的?将一个SELECT查询块另一个SELECT查询?
我正在使用SQL Server 2012和Linq-to-SQL DataContext.
(编辑)
关于表现:
SELECT必须等待第一个SELECT完成SELECT吗?SELECT WITH (NOLOCK)?