我想用两个日期更新记录,如果我没有要更新的新值,则保留现有数据.
这是一个示例表记录:
id last_foo last_bar
-- ---------- ----------
1 2010-05-30 2010-05-30
Run Code Online (Sandbox Code Playgroud)
我正在使用的查询:
UPDATE sampledates
SET last_foo = @LastFoo,
last_bar = @LastBar
WHERE id = @ID;
Run Code Online (Sandbox Code Playgroud)
如果我可以为null的日期时间 LastFoo或者LastBar是空的,我想离开现有的SQL值按原样,否则更新.
例如,假设我使用以下值更新此记录(这是C#但适用任何语言):
DateTime? LastFoo = new DateTime('2010-06-04');
DateTime? LastBar = null;
Run Code Online (Sandbox Code Playgroud)
我希望记录为:
id last_foo last_bar
-- ---------- ----------
1 2010-06-04 2010-05-30
Run Code Online (Sandbox Code Playgroud)
我知道如果值为null,我可以改变我的查询文本以省略第二列,但我想知道是否有一种方法可以保持查询原样并指定我不更改指定的列.
如何使用SQL Server 2005中的元数据获取存储过程的输入参数列表?我想对它做一个SELECt,然后迭代变量名.
有没有办法防止Cursor在运行时更改.如果我有一个迭代所有用户的游标,同时,在每个用户的处理中,我创建了一些额外的用户,那么Cursor也会迭代新创建的用户......
根据我的理解,IsNull函数检查第一个值,如果它为null或空白,则返回下一个值.
SELECT ISNULL(1,getdate())
Run Code Online (Sandbox Code Playgroud)
但上述陈述给出了错误.任何人都可以帮助突出原因吗?
我从Net获得了一个脚本,用于计算来自某个SQL Server实例的数据文件和事务日志文件的使用情况.如果没有具有空格的数据库名称或不太长,则脚本可以正常工作.但是,如果数据库名称有空格或太长,我收到错误消息"消息911,级别16,状态1,行1无法在sysdatabases中找到数据库'测试'的条目.找不到具有该名称的条目.确保正确输入名称." 在示例错误消息中,"Test"具有"Test DB"的完整数据库名称,该名称具有空格.请参阅以下代码:
--Script to calculate information about the Data Files
SET QUOTED_IDENTIFIER OFF
SET NOCOUNT ON
DECLARE @dbname varchar(50)
declare @string varchar(250)
set @string = ''
create table #datafilestats
( Fileid tinyint,
FileGroup1 tinyint,
TotalExtents1 dec (8, 2),
UsedExtents1 dec (8, 2),
[Name] varchar(50),
[FileName] sysname )
create table #dbstats
( dbname varchar(50),
FileGroupId tinyint,
FileGroupName varchar(25),
TotalSizeinMB dec (8, 2),
UsedSizeinMB dec (8, 2),
FreeSizeinPercent dec (8, 2))
DECLARE dbnames_cursor CURSOR FOR SELECT name FROM master..sysdatabases
OPEN …Run Code Online (Sandbox Code Playgroud) 我有一个动态构建查询的存储过程.与此查询关联的where子句基于用户选择的过滤器值.不管我做什么,where子句似乎都没有设置.
-- Dynamically build the WHERE clause based on the filters
DECLARE @whereClause as nvarchar(1024)
IF (@hasSpouse > -1)
BEGIN
IF (@hasSpouse = 0)
SET @whereClause='p.[HasSpouse]=0'
ELSE
SET @whereClause='(p.[HasSpouse]=1 OR p.[HasSpouse] IS NULL)'
END
-- Dynamically add the next filter if necessary
IF (@isVegan > -1)
BEGIN
IF (LEN(@whereClause) > 0)
BEGIN
SET @whereClause = @whereClause + ' AND '
END
IF (@isVegan = 0)
SET @whereClause = @whereClause + 'c.[IsVegan]=0'
ELSE
SET @whereClause = @whereClause + '(c.[IsVegan]=1 OR c.[IsVegan] …Run Code Online (Sandbox Code Playgroud) 好.我在一个表中有一些数据,它多次引用另一个表中的一些数据.
表1 - 主客户表Table2 - 用户定义的字段
假设我有一个查询,显示Table1中的客户端ID以及表2中所有附加/使用的"使用的已定义字段"
SELECT t1.Id, t2.udf
FROM Table1 t1
JOIN Table2 t2 ON t1.Id = t2.Index
WHERE t1.EndDate IS NULL AND
t1.Id = '1234.9876' AND
Run Code Online (Sandbox Code Playgroud)
我会得到以下结果......
ID UDF
1234.9876 100
1234.9876 110
1234.9876 118
1234.9876 124
1234.9876 198
1234.9876 256
Run Code Online (Sandbox Code Playgroud)
现在,假设我想查询同样的事情,并且只获取客户端的ID,但仅限于t2.udf等于'194'的值不存在.所以,我只是得到
ID
1234.9876
Run Code Online (Sandbox Code Playgroud)
...结果是.
我的数据库有大约30个视图,其中大多数都引用了该服务器上的另一个数据库(称之为DB1).
现在,在不考虑原因的情况下,我需要将所有这些视图更新到DB2本地服务器上.
我不想在每个视图上手动执行此操作.是否有一些我可以运行的SQL查询将在我的所有视图中用'DB2'替换所有出现的字符串'DB1'?
t-sql ×7
sql-server ×5
sql ×4
metadata ×2
date ×1
isnull ×1
join ×1
left-join ×1
outer-join ×1