Sql server 将在dot net上定义的SQL脚本转换为存储过程/TSQL
我正在将内联SQL转换为存储过程。以下是内联脚本Sql server 将在dot net上定义的SQL脚本转换为存储过程/TSQL,sql-server,sql-server-2012,sql-server-2008-r2,Sql Server,Sql Server 2012,Sql Server 2008 R2,我正在将内联SQL转换为存储过程。以下是内联脚本 cmdText += "insert into scopeofworktoapptresultsoverride(scopeofworkid, overwrittentext, createdbyid, datecreated, alptorprodid, isaccomplishlist, isproducttype, ismaterial, apptresultid) " cmdText += "values (" & iNewOve
cmdText += "insert into scopeofworktoapptresultsoverride(scopeofworkid, overwrittentext, createdbyid, datecreated, alptorprodid, isaccomplishlist, isproducttype, ismaterial, apptresultid) "
cmdText += "values (" & iNewOverrideId & ", '" & sText & "', " & iEmployeeId & ", getdate(), " & iTiedToId & ", "
If sTiedTo = "material" Then
cmdText += "0, 0, 1 "
ElseIf sTiedTo = "producttype" Then
cmdText += "0, 1, 0 "
Else
cmdText += "1, 0, 0 "
End If
cmdText += ", " & iResult & " )"
我已经像下面那样转换了这个内联SQL。是否有其他方法可以在带有case…when…的单个insert语句中实现这一点。。。。或者某种最好的方法
IF @sTiedTo = 'material'
BEGIN
INSERT INTO scopeofworktoapptresultsoverride (
scopeofworkid
,overwrittentext
,createdbyid
,datecreated
,alptorprodid
,isaccomplishlist
,isproducttype
,ismaterial
,apptresultid
)
VALUES (
@iNewOverrideId
,@sText
,@iEmployeeId
,getdate()
,@iTiedToId
,0
,0
,1
,@iResult
)
END
ELSE IF @sTiedTo = 'producttype'
BEGIN
INSERT INTO scopeofworktoapptresultsoverride (
scopeofworkid
,overwrittentext
,createdbyid
,datecreated
,alptorprodid
,isaccomplishlist
,isproducttype
,ismaterial
,apptresultid
)
VALUES (
@iNewOverrideId
,@sText
,@iEmployeeId
,getdate()
,@iTiedToId
,0
,1
,0
,@iResult
)
END
ELSE
BEGIN
INSERT INTO scopeofworktoapptresultsoverride (
scopeofworkid
,overwrittentext
,createdbyid
,datecreated
,alptorprodid
,isaccomplishlist
,isproducttype
,ismaterial
,apptresultid
)
VALUES (
@iNewOverrideId
,@sText
,@iEmployeeId
,getdate()
,@iTiedToId
,1
,0
,0
,@iResult
)
END
您可以查看每个布尔字段的用例,因此只需要一条insert语句() 例如,要设置IsMaterial列,请使用:
case当@sTiedTo='material'然后是1 else 0 end时您可以查找每个布尔字段的用例,因此只需要一个insert语句() 例如,要设置IsMaterial列,请使用: 当@sTiedTo='material'然后1 else 0结束时的情况类似于(未测试,从我的头顶)
插入到工作范围以应用SultSoverride(
工作范围ID
,覆盖文本
,createdbyid
,datecreated
阿普托普罗迪德
,isaccomplishlist
,iProductType
,是物质的
,apptresultid
)
价值观(
@白藜芦醇苷
,@sText
,@iEmployeeId
,getdate()
,@iTiedToId
,当@sTiedTo“material”和@isTiedTo“producttype”时为1,否则为0结束
,当@sTiedTo='producttype'时为大小写,然后为1,否则为0结束
,当@sTiedTo='material'时为1,则为0结束
,@iResult
)
类似(未经测试,从我的头顶)
插入到工作范围以应用SultSoverride(
工作范围ID
,覆盖文本
,createdbyid
,datecreated
阿普托普罗迪德
,isaccomplishlist
,iProductType
,是物质的
,apptresultid
)
价值观(
@白藜芦醇苷
,@sText
,@iEmployeeId
,getdate()
,@iTiedToId
,当@sTiedTo“material”和@isTiedTo“producttype”时为1,否则为0结束
,当@sTiedTo='producttype'时为大小写,然后为1,否则为0结束
,当@sTiedTo='material'时为1,则为0结束
,@iResult
)
谢谢我感谢你的接近谢谢我感谢你的接近谢谢你的回答。我已经选择了影子答案,但是我可以投赞成票。谢谢你的回答。我已经选择了影子答案,但我可以投赞成票。
Declare @isaccomplishlist bit
Declare @isproducttype bit
Declare @ismaterial bit
Set @isaccomplishlist = 0
Set @isproducttype = 0
Set @ismaterial = 0
IF @sTiedTo = 'material' BEGIN
Set @ismaterial = 1
END
ELSE IF @sTiedTo = 'producttype' BEGIN
Set @isproducttype = 1
END
ELSE BEGIN
Set @isaccomplishlist = 1
END
INSERT INTO scopeofworktoapptresultsoverride (
scopeofworkid
,overwrittentext
,createdbyid
,datecreated
,alptorprodid
,isaccomplishlist
,isproducttype
,ismaterial
,apptresultid
)
VALUES (
@iNewOverrideId
,@sText
,@iEmployeeId
,getdate()
,@iTiedToId
,@isaccomplishlist
,@isproducttype
,@ismaterial
,@iResult
)
INSERT INTO scopeofworktoapptresultsoverride (
scopeofworkid
,overwrittentext
,createdbyid
,datecreated
,alptorprodid
,isaccomplishlist
,isproducttype
,ismaterial
,apptresultid
)
VALUES (
@iNewOverrideId
,@sText
,@iEmployeeId
,getdate()
,@iTiedToId
,CASE WHEN @sTiedTo <> 'material' AND @isTiedTo <> 'producttype' THEN 1 ELSE 0 END
,CASE WHEN @sTiedTo = 'producttype' THEN 1 ELSE 0 END
,CASE WHEN @sTiedTo = 'material' THEN 1 ELSE 0 END
,@iResult
)