我需要创建一个约束或类似的东西,只允许字符像A-Z,_并-在一列.
如何才能做到这一点?
我有一个具有以下结构的表:
create table roster
(
date date not null,
first nvarchar(20) not null,
second nvarchar(20) not null,
third nvarchar(20) not null,
fourth nvarchar(20) not null,
)
go
Run Code Online (Sandbox Code Playgroud)
并且插入了以下数据:
insert into roster values ('2015-06-10 12:45:34', 'e', 'm', 'a', 'r')
insert into roster values ('2015-06-11 12:45:34', 'e', 'v', 'a', 'r')
insert into roster values ('2015-06-12 12:45:34', 'e', 'm', 'a', 'd')
insert into roster values ('2015-06-13 12:45:34', 'e', 'm', 'a', 'd') *
insert into roster values ('2015-06-14 12:45:34', 'e', 'm', 'a', 'r')
insert …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
create procedure my_sp_name_here
@param1 int,
@param2 nvarchar(128)
as
begin
...<sql here>...;
end
declare @paramDef nvarchar(500) = N'@param1 int, @param2 nvarchar(128)';
execute sp_executesql my_sp_name_here, @paramDef, @param1=1, @param2=N'p2';
Run Code Online (Sandbox Code Playgroud)
我一直收到错误:
过程或函数'my_sp_name_here'需要参数@param1,它未提供.
我尝试了几种不同的配置并进行了搜索,但我还没有找到答案.任何帮助,将不胜感激.
我有一个SQL Server 2008 R2查询返回"假设"100行.我实际上正在使用7k - 8k行.
该Where条款是这样的:
Where Col_a = 'Y'
And Col_b = 'N'
And Col_c = 'X'
Run Code Online (Sandbox Code Playgroud)
其中25行有'P' Col_d.
我补充说:
And Col_d = 'P'
Run Code Online (Sandbox Code Playgroud)
并且查询返回了预期的25行.
然后我改为
And Col_d <> 'P'
Run Code Online (Sandbox Code Playgroud)
我预计会得到75排,但我只有50排.
我认为添加" And Col_d <> 'P'"只会限制有一个'P'in 的行Col_d.
为什么不是这样的,当我说And时,我怎么弄清楚还有什么东西掉了Col_d <> 'P'?
正如我所说 - 我实际上是在处理更大的数字,所以要注意它并不容易.
我很感激任何帮助.
谢谢!
CREATE VIEW dbo.myview1 As
SELECT
a.Id ,
a.Name ,
a.Age ,
CASE
WHEN b.PmtSched ='Monthly' THEN 12
WHEN b.PmtSched ='Quarterly' THEN 4
WHEN b.PmtSched ='Semi-Annual' THEN 2
WHEN b.PmtSched ='Annually' THEN 1
ELSE 12
END AS ABC,
SUM(a.Amount) *50 as TotalAmount ,
(a.AmtSpent - TotalAmount) * ABC as TOTALSPENDS
FROM dbo.User a join dbo.Details b on a.Id = b.Id
Run Code Online (Sandbox Code Playgroud)
这里ABC和TotalAmount是别名列,需要在视图中使用计算,我无法使用它们.如何实现这一点?我们有什么方法可以做到这一点,或者我们不能?请帮助.
我必须以奇怪的格式显示时间.例如,如果时间是15:30:45.5000,我需要显示"153045.5".
为此,我有以下查询:
SELECT LEFT(CONVERT(varchar(20), GETDATE(), 114), 2) +
SUBSTRING(CONVERT(varchar(20), GETDATE(), 114), 4, 2) +
SUBSTRING(CONVERT(varchar(20), GETDATE(), 114), 7, 2) + '.' +
SUBSTRING(CONVERT(varchar(20), GETDATE(), 114), 10, 1);
Run Code Online (Sandbox Code Playgroud)
有什么我可以做的,以避免重复表达CONVERT(varchar(20),GETDATE(),114)?
编辑:
我在这里看到了一个非常酷的答案,在我刷新页面之后由于某种原因被删除了,但它让我想到了一个替代解决方案:
SELECT REPLACE(RIGHT(CONVERT(varchar(21), getdate(), 126), 10), ':', '')
Run Code Online (Sandbox Code Playgroud)
虽然这个答案并没有以通用的方式解决原始问题,但它仍然以不同的方式解决了我的问题.
我需要根据下拉值将过滤器添加到存储过程
可用值为0,1,2,3,4,5.@TescilDurum是我的参数.
0 = ALL
1 = TescilDurumId IN 4 OR 5
2 = t.ID IS NULL
3 = dncts.RegistrationCode IS NULL
4 = hsm.ID IS NULL AND dncts.RegistrationCode IS NULL IS NOT NULL
5 = hsm.ENSMRN IS NULL
Run Code Online (Sandbox Code Playgroud)
到目前为止,我从互联网上的类似问题答案中尝试了这个,但我不确定这是否正确.我不确定这种"反向逻辑"是否是正确的方法.而它之后的顺序也给出了错误......
AND 1 =
CASE WHEN @TescilDurum = 1 AND t.TescilDurumId NOT IN (4,5) THEN 0
ELSE CASE WHEN @TescilDurum = 2 AND t.Id IS NOT NULL THEN 0
ELSE CASE WHEN @TescilDurum = 3 AND hsm.EnsMRN IS NOT NULL THEN …Run Code Online (Sandbox Code Playgroud) 我正在使用SSRS 2008R2和SSMS 2008R2我试图分割4列,一行分为两行,两列.我怎样才能做到这一点?
以下是一些示例数据:
create table #foo
(col1 int, col2 int, col3 int, col4 int)
insert #foo values(1,2,3,4)
insert #foo values(5,6,7,8)
insert #foo values(9,10,11,12)
select * from #foo
Run Code Online (Sandbox Code Playgroud)
但我想将此数据转换为如下所示:
create table #goo (col1 int, col2 int)
insert #goo values(1,2)
insert #goo values(3,4)
insert #goo values(5,6)
insert #goo values(7,8)
insert #goo values(9,10)
insert #goo values(11,12)
select * from #goo
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我正在尝试使用SQL Server比较汇编版本,但是可以返回多个版本,我需要它是六位数格式.
例如,程序集版本2.00.0001和我需要返回为2.0.1.
可能有1.01.0031我需要的版本1.1.31.
这有效,但有更好的方法吗?
select left(left([output],9),1)+'.'+substring(left([output],9),3,1)+'.'+substring(right(left([output],9),1),1,1)
Run Code Online (Sandbox Code Playgroud) 我使用SQL Server 2008 R2.我创建了一个临时表,然后用1000行填充临时表.
Create Table #Temp
(
ID Int,
res INT
)
Insert Into #Temp
VALUES (10004, 2246), (10005, 2246), (10006, 2246), (10007, 2246),
(10008, 2246), (10009, 2246), (10010, 2246), (10011, 2246),
(10013, 2246), (10014, 2246), (10015, 2246), (10016, 2246),
(10017, 2246), (10018, 2246), (10019, 2246), (10020, 2246),
(10021, 2246), ................
Run Code Online (Sandbox Code Playgroud)
我有另一个名为的表Item.它有大约30000条记录.
我有一个INNER JOIN介于Item我和临时表之间.
Select
*
From
Inventory.Item
Inner Join
#Temp On (#Temp.ID = item.MasterID And MRes = ExRestaurantID)
Run Code Online (Sandbox Code Playgroud)
正如您在下面的三张图片中看到的,SQL Server已经为我的查询创建了一个执行计划,但在他的计划中,它估计我的Item表只有一行,因此它使用了嵌套循环连接. …
sql-server temp-tables nested-loops sql-server-2008-r2 sql-execution-plan
sql-server ×10
sql ×8
t-sql ×5
case ×1
clause ×1
nested-loops ×1
split ×1
temp-tables ×1
where ×1
where-clause ×1