可能重复:
T-SQL强制转换与转换
SQL 之间CAST和CONVERTSQL 之间的主要区别是什么导致数据类型转换?
我创建了下面列出的过程:
CREATE procedure getdata
(
@ID int,
@frm varchar(250),
@to varchar(250)
)
AS
BEGIN
DECLARE @SQL nvarchar(500)
set @SQL = 'select'
set @SQL = @SQL + ' EmpName, Address, Salary from Emp_Tb where 1=1 '
IF (@ID <> '' and @ID is not null)
Begin
SET @sql=@sql+' AND Emp_Id_Pk=' +@ID
End
END
print @sql
--execute (@sql)
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下方法执行它:
**execute getdata 3,'','';**
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
将nvarchar值'select EmpName,Address,Salary从Emp_Tb转换为1 = 1 AND Emp_Id_Pk ='转换为数据类型int时转换失败
请帮忙.
我的表具有几个位字段的权限.我想在此表中对行进行分组,并获得具有最高权限的结果.所以用这个表:
UserId, Permisssion1,Permission2, Permisssion3
Run Code Online (Sandbox Code Playgroud)
这对于行
13,1,0,0
13,0,1,0
我想得到:
13,1,1,0
问题是运算符MAX不能在位字段上工作.如何以有效的方式做到这一点?(不使用CASE)
我在SELECT中有这个代码:
SELECT A.CompletedDate,
CASE
WHEN (@AdminTestId IS NULL AND @UserTestId IS NULL) THEN 0
WHEN (@AdminTestId = temp.AdminTestId AND @UserTestId = A.UserTestId) THEN 1
WHEN (@AdminTestId = temp.AdminTestId AND @UserTestId IS NULL) THEN 1
ELSE 0
END AS [Current],
Run Code Online (Sandbox Code Playgroud)
在我的ASP.NET DTO中我有:
public partial class GetTestsDTO
{
public bool? GradePass { get; set; }
// the following line is what is giving the error. If I remove
// the line it will not try to convert the data and there is …Run Code Online (Sandbox Code Playgroud) 选择什么:Cast或Convert日期时间(Microsoft SQL Server)?
我看过MSDN规范.乍一看似乎除了语法之外没有区别:
CAST的语法:
CAST ( expression AS data_type [ ( length ) ] )
Run Code Online (Sandbox Code Playgroud)
CONVERT的语法:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Run Code Online (Sandbox Code Playgroud)
和CAST是ANSI标准,这使得它更便于携带防空火炮不同的数据库平台.
我有一个DateTime字段.我想忽略该字段上的时间并添加指定的小时.
这是我正在寻找的一个例子,其中@h可以是0到23之间的任何值.(为了简单起见,我使用getdate()而不是我的表中的字段).
declare @h int = 8
select cast(cast(cast(getdate() as date) as nvarchar(50)) + ' ' + CAST(@h as nvarchar(2)) + ':00' as datetime)
Run Code Online (Sandbox Code Playgroud)
我怎么能更简单地写这个?请记住,我对可读性/可维护性比对速度更感兴趣.