Как Вы проверяете что версия SQL Server для базы данных с помощью TSQL?

Следующий mcve демонстрирует рекурсивное получение соседей и их накопление в уникальные комбинации.
Код задокументирован с комментариями:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

class Ideone
{
    private static final int SIZE = 7;     //size of combo 

    private static int[][] directions = {  //represents moving directions 
            {-1, 0},  //up
            { 0,-1},  //left
            { 0, 1},  //right
            { 1, 0}   //down
    };

    public static void main (String[] args) throws java.lang.Exception
    {
        int[][] matrix =  {{1, 2, 3},
                {4, 5, 6},
                {7, 8, 9},
        };
        Set<String> comboSet =  get7DigitCombo(matrix);
        System.out.print(comboSet.size());
    }

    public static Set<String> get7DigitCombo(int[][] matrix)
    {
        Set<String> comboSet =  new HashSet<>();

        get7DigitCombo(1, 0, matrix, String.valueOf(matrix[1][0]), comboSet);
        return comboSet;
    }

     //recursively get all neighbors. generate combos by appending each neighbor 
    //combo represents a single combination. combos accumulates combination 
    static void get7DigitCombo(int row, int col, int[][] matrix, String combo, Set<String> combos){

        if(combo !=null && combo.length() == SIZE) { //when combo reached the right size, add it  
            //System.out.println(combo);
            combos.add(combo);
            return;
        }

        //get and iterate over all adjacent neighbors 
        for(int[] neighbor : getNeighbors(row, col, matrix)){
            get7DigitCombo(neighbor[0], neighbor[1], matrix, combo+neighbor[2], combos);
        }
    }

    //return list of adjacent neighbors. each neighbor is represented by
    //int[3]: row, column, value
    private static List<int[]> getNeighbors(int row, int col, int[][] matrix) {

        List<int[]> neighbors = new ArrayList<>();
        for(int[] dir : directions){
            int newRow = row + dir[0] ; int newCol = col + dir[1];
            if(isValidAddress(newRow, newCol, matrix)) {
                neighbors.add( new int[]{newRow,newCol, matrix[newRow][newCol]});
            }
        }
        return neighbors;
    }

    private static boolean isValidAddress(int row, int col, int[][] matrix) {

        if(row < 0 || col < 0) return false;
        if(row >= matrix.length || col >= matrix[row].length) return false;
        return true;
    }
} 
125
задан Ray Vega 12 September 2008 в 16:29
поделиться

5 ответов

Попробуйте

SELECT @@VERSION 

или для SQL Server 2000, и выше следующего легче проанализировать :)

SELECT SERVERPROPERTY('productversion')
     , SERVERPROPERTY('productlevel')
     , SERVERPROPERTY('edition')

От: http://support.microsoft.com/kb/321185

232
ответ дан 24 November 2019 в 00:57
поделиться

Вот немного сценария, который я использую для тестирования, если сервер является 2005 или позже

declare @isSqlServer2005 bit
select @isSqlServer2005 = case when CONVERT(int, SUBSTRING(CONVERT(varchar(15), SERVERPROPERTY('productversion')), 0, CHARINDEX('.', CONVERT(varchar(15), SERVERPROPERTY('productversion'))))) < 9 then 0 else 1 end
select @isSqlServer2005

Примечание: обновленный из исходного ответа (см. комментарий)

2
ответ дан 24 November 2019 в 00:57
поделиться

ВЫБЕРИТЕ @@ ВЕРСИЯ

29
ответ дан 24 November 2019 в 00:57
поделиться

Статья KB связалась в , сообщение Joe является большим для определения, какие пакеты обновления были установлены для любой версии. Вдоль тех тех же строк эта статья KB отображает номера версий на определенные текущие исправления и накопительные пакеты обновления, но она только относится к SQL05 SP2 и.

1
ответ дан 24 November 2019 в 00:57
поделиться

Попробуйте так:

if (SELECT LEFT(CAST(SERVERPROPERTY('productversion') as varchar), 2)) = '10'
BEGIN
1
ответ дан 24 November 2019 в 00:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: