CREATE PROCEDURE UPKJ90Detail @StatusID INT, @IOTime VARCHAR ( 50 ), @UniqueId bigint, @DataFlag VARCHAR ( 50 ) AS UPDATE Detail202206
SET DataFlag = @DataFlag,
StatusID = @StatusID
WHERE
UniqueId = @UniqueId
AND IOTime BETWEEN CONVERT ( VARCHAR,@IOTime, 120 ) + '.000'
AND CONVERT ( VARCHAR,@IOTime, 120 ) + '.999'
Detail202206 作为参数传递,这个sql语句怎么写呢?放到txt文本中c#读取执行。
CREATE PROCEDURE UPKJ90Detail
@StatusID INT,
@IOTime VARCHAR ( 50 ),
@UniqueId bigint,
@DataFlag VARCHAR ( 50 ),
@TableName varchar(200)
AS
set nocount on
declare @sql nvarchar(max)
declare @time1 varchar(30)=convert(varchar(23),@IOTime,120)
declare @time2 varchar(30)=convert(varchar(23),@IOTime,120)+'.997'
set @sql=N'UPDATE '+@TableName+'
SET DataFlag = '''+@DataFlag+''',
StatusID = '+left(@StatusID,10)+'
WHERE UniqueId = '+left(@UniqueId,10)+'
AND IOTime BETWEEN '''+@time1+''' and '''+@time2+''''
exec sp_executesql @sql
set nocount off
说明一下,MSSQL的datetime类型数据精度是3微秒,所以后面加上.999是没有意义的,应该是加上.997
既然你是用C#读取执行,字符串拼接一下不就得了,这跟sql有什么关系
参考这个,C#传递表名作为存储过程的参数的
在C#中读取txt文本内容,然后动态拼接成SQL就好了。
比如:
string tablename = "Detail202206 "; // 加入tablename 是你从txt文本中读取的表名
stirng sql ="CREATE PROCEDURE UPKJ90Detail @StatusID INT, @IOTime VARCHAR ( 50 ), @UniqueId bigint, @DataFlag VARCHAR ( 50 ) AS UPDATE ";
sql = sql + tablename + " SET DataFlag = @DataFlag,"; // 这个后面的我就不写了,剩下的自己拼一下;然后执行sql 就好了
存储过程:https://www.cnblogs.com/ringwang/p/1241676.html
调用:https://www.csdn.net/tags/MtTaIg2sMDIxNi1ibG9n.html