我正在使用SQL Server,并尝试从同一个表中更新行.我想使用表别名来提高可读性.
这就是我现在这样做的方式:
UPDATE ra
SET ra.ItemValue = rb.ItemValue
FROM dbo.Rates ra
INNER JOIN dbo.Rates rb
ON ra.ResourceID = rb.ResourceID
WHERE ra.PriceSched = 't8'
AND rb.PriceSched = 't9'
Run Code Online (Sandbox Code Playgroud)
有更简单/更好的方法吗?
我需要确保一个给定的字段在字符之间没有多个空格(我不关心所有空格,只关心空格).
所以
'single spaces only'
Run Code Online (Sandbox Code Playgroud)
需要变成
'single spaces only'
Run Code Online (Sandbox Code Playgroud)
以下不起作用
select replace('single spaces only',' ',' ')
Run Code Online (Sandbox Code Playgroud)
因为它会导致
'single spaces only'
Run Code Online (Sandbox Code Playgroud)
我更喜欢坚持使用原生T-SQL而不是基于CLR的解决方案.
思考?
SELECT -100/-100*10结果是0.SELECT (-100/-100)*10结果是10.SELECT -100/(-100*10)结果是0.SELECT 100/100*10结果是10.BOL声明:
当表达式中的两个运算符具有相同的运算符优先级时,它们将根据它们在表达式中的位置从左到右进行计算.
和
Level Operators
1 ~ (Bitwise NOT)
2 * (Multiplication), / (Division), % (Modulus)
3 + (Positive), - (Negative), + (Addition), + (Concatenation), - (Subtraction), & (Bitwise AND), ^ (Bitwise Exclusive OR), | (Bitwise OR)
Run Code Online (Sandbox Code Playgroud)
BOL是错的,还是我错过了什么?似乎-正在抛弃(预期)优先权.
我正在写一个查询,我必须在去年获得数据.做这个的最好方式是什么?
SELECT ... FROM ... WHERE date > '8/27/2007 12:00:00 AM'
Run Code Online (Sandbox Code Playgroud) 简单的问题,如何使用T-SQL列出表的主键?我知道如何在表上获取索引,但不记得如何获取PK.
我正在寻找一种简单的方法来序列化对象(在C#3中).
我用Google搜索了一些例子,并得出了类似的结果:
MemoryStream memoryStream = new MemoryStream ( );
XmlSerializer xs = new XmlSerializer ( typeof ( MyObject) );
XmlTextWriter xmlTextWriter = new XmlTextWriter ( memoryStream, Encoding.UTF8 );
xs.Serialize ( xmlTextWriter, myObject);
string result = Encoding.UTF8.GetString(memoryStream .ToArray());
Run Code Online (Sandbox Code Playgroud)
读完这个问题之后我问自己,为什么不使用StringWriter?看起来容易得多.
XmlSerializer ser = new XmlSerializer(typeof(MyObject));
StringWriter writer = new StringWriter();
ser.Serialize(writer, myObject);
serializedValue = writer.ToString();
Run Code Online (Sandbox Code Playgroud)
另一个问题是,第一个示例生成的XML我不能只写入SQL Server 2005 DB的XML列.
第一个问题是:在我之后需要它作为字符串时,是否有理由不使用StringWriter序列化Object?在google搜索时,我从未找到使用StringWriter的结果.
第二个当然是:如果你不应该使用StringWriter(无论出于何种原因),这将是一个好的和正确的方法?
加成:
正如两个答案已经提到的那样,我将进一步讨论XML到DB的问题.
写入数据库时,我得到以下异常:
System.Data.SqlClient.SqlException:XML解析:第1行,字符38,无法切换编码
对于字符串
<?xml version="1.0" encoding="utf-8"?><test/>
Run Code Online (Sandbox Code Playgroud)
我从XmlTextWriter中获取了字符串,然后将xml放在那里.这个没有用(手动插入DB).
之后我尝试使用encoding ="utf-16"手动插入(只是编写INSERT INTO ...),这也失败了.删除编码完全有效.在那个结果之后我切换回StringWriter代码并且瞧 - 它工作了.
问题:我真的不明白为什么.
在Christian Hayter:通过这些测试,我不确定我是否必须使用utf-16来写入数据库.不会将编码设置为UTF-16(在xml标签中)吗?
有谁知道在SQL Server 2000数据库中列出打开事务的任何方法?
我知道我可以查询sys.dm_tran_session_transactionsSQL 2005(及更高版本)数据库版本的视图,但这在SQL 2000上不可用.
我有一个代码是:
DECLARE @Script VARCHAR(MAX)
SELECT @Script = definition FROM manged.sys.all_sql_modules sq
where sq.object_id = (SELECT object_id from managed.sys.objects
Where type = 'P' and Name = 'usp_gen_data')
Declare @Pos int
SELECT @pos=CHARINDEX(CHAR(13)+CHAR(10),@script,7500)
PRINT SUBSTRING(@Script,1,@Pos)
PRINT SUBSTRING(@script,@pos,8000)
Run Code Online (Sandbox Code Playgroud)
脚本的长度大约是10,000个字符,因为我使用的print语句最多只能容纳8000个.所以我使用了两个打印语句.
问题是,当我有一个脚本,比如18000个字符,然后我习惯使用3个打印语句.
那么有没有办法可以根据脚本的长度设置打印语句的数量?
是否有可能在Microsoft SQL Server中生成从Min到Max的随机int值(3-9示例,15-99等)
我知道,我可以生成从0到Max,但是如何增加Min边界?
此查询生成从1到6的随机值.需要将其从3更改为6.
SELECT table_name, 1.0 + floor(6 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables
Run Code Online (Sandbox Code Playgroud)
5秒后添加:
愚蠢的问题,对不起......
SELECT table_name, 3.0 + floor(4 * RAND(convert(varbinary, newid()))) magic_number
FROM information_schema.tables
Run Code Online (Sandbox Code Playgroud) 我需要根据某种优先级从表中选择数据,如下所示:
select product, price from table1 where project = 1
-- pseudo: if no price found, do this:
select product, price from table1 where customer = 2
-- pseudo: if still no price found, do this:
select product, price from table1 where company = 3
Run Code Online (Sandbox Code Playgroud)
也就是说,如果我找到3个基于价格的产品project = X,我不想选择customer = Y.我只想返回结果3行并完成.
你怎么在SQL中做这样的事情?对pseudo-if使用某种CASE语句?做工会还是其他聪明的事情?
编辑:我正在使用MS SQL.
谢谢!