【问题标题】:Is it possible to set a variable for a stored procedure as column type?是否可以将存储过程的变量设置为列类型?
【发布时间】:2014-04-17 15:39:36
【问题描述】:

这似乎是一个足够简单的事件,您只需将要传递给存储过程的变量声明为列。我需要将列名传递给将在查询中使用的存储过程。是否可以声明它以便我可以将其用作列名,或者有什么方法可以将字符串转换为列类型?

where Line1AStatus = 1

我需要能够将线路状态中的数字传递给我的存储过程。到目前为止,我已经尝试过这些方法。感谢您的帮助。

where Line + @LineNum + AStatus = 1
where 'Line' + @LinNum + 'AStatus' = 1

【问题讨论】:

    标签: sql stored-procedures sql-server-2012


    【解决方案1】:

    不使用标准 SQL,但您可以使用动态 sql

    DECLARE @SQL nvarchar(max)
    SELECT @SQL = 'SELECT * FROM table where ''Line' + CAST(@LinNum AS NVARCHAR) + 'AStatus'' = 1'
    exec sp_executeSQL @sql
    

    while 循环示例

    DECLARE @SQL nvarchar(max), @LinNum int
    
    SELECT @LinNum = 1
    WHILE(@LinNum <= 5)
    BEGIN
        SELECT @SQL = 'SELECT * FROM table where ''Line' + CAST(@LinNum AS NVARCHAR) + 'AStatus'' = 1'
        exec sp_executeSQL @sql
    
        SELECT @LinNum = @LinNum + 1
    END
    

    【讨论】:

    • 所以将我的查询更改为 nvarchar 抱歉使用 c# 并将其称为字符串。
    • nvarchar 是 sql-servers “字符串”,如果将语句构造为字符串,则可以使用 execute_sql 运行它。将其作为存储过程通常很有用:)
    • 如果您不介意我问为什么标准和动态的差异允许您使用它?
    • @Kpt.Khaos dynamic 将在字符串中运行语句,因此优点是您可以根据需要构建字符串(例如在 while 循环中),然后可以执行该字符串。标准 SQL 不支持构造字段名,因为它是“编译”的,因为在编译时缺少更好的术语,因此无法在运行时更改
    • @Kpt.Khaos 注意到一些遗漏的字符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多