Is there a way to make a TSQL variable constant?

前端 未结 12 1046
别那么骄傲
别那么骄傲 2021-02-01 11:31

Is there a way to make a TSQL variable constant?

12条回答
  •  离开以前
    2021-02-01 12:09

    The best answer is from SQLMenace according to the requirement if that is to create a temporary constant for use within scripts, i.e. across multiple GO statements/batches.

    Just create the procedure in the tempdb then you have no impact on the target database.

    One practical example of this is a database create script which writes a control value at the end of the script containing the logical schema version. At the top of the file are some comments with change history etc... But in practice most developers will forget to scroll down and update the schema version at the bottom of the file.

    Using the above code allows a visible schema version constant to be defined at the top before the database script (copied from the generate scripts feature of SSMS) creates the database but used at the end. This is right in the face of the developer next to the change history and other comments, so they are very likely to update it.

    For example:

    use tempdb
    go
    create function dbo.MySchemaVersion()
    returns int
    as
    begin
        return 123
    end
    go
    
    use master
    go
    
    -- Big long database create script with multiple batches...
    print 'Creating database schema version ' + CAST(tempdb.dbo.MySchemaVersion() as NVARCHAR) + '...'
    go
    -- ...
    go
    -- ...
    go
    use MyDatabase
    go
    
    -- Update schema version with constant at end (not normally possible as GO puts
    -- local @variables out of scope)
    insert MyConfigTable values ('SchemaVersion', tempdb.dbo.MySchemaVersion())
    go
    
    -- Clean-up
    use tempdb
    drop function MySchemaVersion
    go
    

提交回复
热议问题