sql 存储过程 表名作为参数 传递



    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