28 votes

Fonctions / commandes SQL Server que la plupart des développeurs ignorent

Double Possible:
Les Fonctions cachées de SQL Server

Je crois que cette question a mal été fermé comme une copie exacte. 19 personnes ont cette question ajoutés à vos favoris, donc je ne crois pas que c'est une hypothèse erronée. Dans la question, je ne demande pas à propos de fonctionnalités cachées comme dans l'autre question, je vais demander sur les fonctions/commandes que la plupart des développeurs devrait le savez sans doute, mais qui ne savent pas. S'il vous plaît voter pour rouvrir cette question. Il est Wiki de la Communauté, donc il n'ya aucune raison pourquoi il devrait être fermé. Merci

J'ai travaillé en tant que .NET développeur pour un certain temps maintenant, mais surtout contre une base de données SQL Server pour un peu plus de 3 ans maintenant. J'ai l'impression que j'ai une assez bonne connaissance de SQL Server à partir d'une perspective de développement, mais j'ai honte d'admettre que je viens d'apprendre aujourd'hui à propos de "AVEC des LIENS" de cette réponse - http://stackoverflow.com/questions/1236394/top-5-with-most-friends/1236414#1236414.

Il est humiliant de voir les questions et réponses de cette SORTE, car il me permet de réaliser que je ne sais vraiment pas autant que je pense que je fais et permet de re-dynamiser ma volonté pour en savoir plus, j'ai donc pensé quoi de mieux que de poser les masses d'experts pour l'entrée sur d'autres pratique des commandes/fonctions.

Quelle est la caractéristique la plus utile/commande que le développeur moyen est probablement pas au courant de?

BTW - si vous êtes comme je l'étais, et je ne sais quoi "AVEC des LIENS" est, ici, c'est une bonne explication. Vous verrez rapidement pourquoi j'avais honte, j'étais pas au courant de cela. J'ai pu voir où elle pourrait être utile. - http://harriyott.com/2007/06/with-ties-sql-server-tip.aspx

Je me rends compte que c'est une question subjective, de sorte s'il vous plaît permettre au moins quelques réponses avant de le fermer. :) Je vais essayer de modifier ma question de garder une liste de votre réponse. Merci

[EDIT] - Voici un résumé des réponses, Veuillez défiler vers le bas pour plus d'informations. Merci encore les gars et les filles.

  • FUSION - UNE seule commande pour INSÉRER / mettre à JOUR / SUPPRIMER dans une table à partir d'une source de ligne.
  • Fonctionnalité FILESTREAM de SQL Server 2008 qui permet le stockage et l'accès efficace aux données BLOB à l'aide d'une combinaison de SQL Server 2008 et le système de fichiers NTFS
  • FONTE d'obtenir une date, sans un temps partie
  • Groupe Par - je dois vous dire que vous devez certainement savoir ce déjà
  • SQL Server Management Studio
  • Les Transactions
  • Le partage de portée locale temp des tables imbriquées les appels de procédure
  • INSERT INTO
  • MSDN
  • Les JOINTURES
  • PIVOT et UNPIVOT
  • AVEC(FORCESEEK) - les forces de l'optimiseur de requête à utiliser uniquement une opération de recherche d'index comme le chemin d'accès aux données dans le tableau.
  • POUR XML
  • FUSIONNER
  • Comment faire pour réduire la base de données et les fichiers journaux
  • Information_Schema
  • SET IMPLICIT_TRANSACTIONS dans Management Studio 2005
  • Les tables dérivées et les expressions de table communes (expressions de table communes)
  • Clause OUTPUT - permet d'accéder à la "virtuel" tables appelé inserted et deleted (comme dans les déclencheurs)
  • CTRL + 0 pour insérer la valeur null
  • Spatiale de Données dans SQL Server 2008

11voto

Srikar Doddi Points 10611

FileStream dans SQL Server 2008: FILESTREAM fonctionnalité de SQL Server 2008 qui permet le stockage et l'accès efficace aux données BLOB à l'aide d'une combinaison de SQL Server 2008 et le système de fichiers NTFS.

La création d'un Tableau pour Stocker les Données FILESTREAM

Une fois la base de données a un groupe de fichiers FILESTREAM, les tableaux peuvent être créés qui contiennent des colonnes FILESTREAM. Comme mentionné plus tôt, une colonne FILESTREAM est définie comme une colonne varbinary (max) qui a l'attribut FILESTREAM. Le code suivant crée une table avec une seule colonne FILESTREAM

USE Production;
GO
CREATE TABLE DocumentStore (
       DocumentID INT IDENTITY PRIMARY KEY,
       Document VARBINARY (MAX) FILESTREAM NULL,
       DocGUID UNIQUEIDENTIFIER NOT NULL ROWGUIDCOL
              UNIQUE DEFAULT NEWID ())
FILESTREAM_ON FileStreamGroup1;
GO

8voto

Quassnoi Points 191041
  • En SQL Server 2008 (et en Oracle 10g): MERGE.

    Une seule commande pour INSERT / UPDATE / DELETE dans une table à partir d'une source de ligne.

  • Pour générer une liste de nombres à partir de 1 de 31 (par exemple, pour un calendary):

    WITH   cal AS
            (
            SELECT  1 AS day
            UNION ALL
            SELECT  day + 1
            FROM    cal
            WHERE   day <= 30
            )
    
  • Une seule colonne de l'index avec DESC clause dans un cluster de table peut être utilisée pour le tri column DESC, cluster_key ASC:

    CREATE INDEX ix_column_desc ON mytable (column DESC)
    
    
    SELECT  TOP 10 *
    FROM    mytable
    ORDER BY
            column DESC, pk
    -- Uses the index
    
    
    SELECT  TOP 10 *
    FROM    mytable
    ORDER BY
            column, pk
    -- Doesn't use the index
    
  • CROSS APPLY et OUTER APPLY: permet de joindre rowsources qui dépendent des valeurs des tables jointes:

    SELECT  *
    FROM    mytable
    CROSS APPLY
            my_tvf(mytable.column1) tvf
    
    
    SELECT  *
    FROM    mytable
    CROSS APPLY
            (
            SELECT  TOP 5 *
            FROM    othertable
            WHERE   othertable.column2 = mytable.column1
            ) q
    
  • EXCEPT et INTERSECT opérateurs: permettent de sélectionner les conditions qui incluent NULLs

    DECLARE @var1 INT
    DECLARE @var2 INT
    DECLARE @var3 INT
    
    
    SET @var1 = 1
    SET @var2 = NULL
    SET @var2 = NULL
    
    
    SELECT  col1, col2, col3
    FROM    mytable
    INTERSECT 
    SELECT  @val1, @val2, @val3
    
    
    -- selects rows with `col1 = 1`, `col2 IS NULL` and `col3 IS NULL`
    
    
    SELECT  col1, col2, col3
    FROM    mytable
    EXCEPT 
    SELECT  @val1, @val2, @val3
    
    
    -- selects all other rows
    
  • WITH ROLLUP clause de: sélectionne un grand total de toutes les lignes groupées

    SELECT  month, SUM(sale)
    FROM    mytable
    GROUP BY 
            month WITH ROLLUP
    
    
    Month   SUM(sale)
      ---        ---
      Jan        10,000
      Feb        20,000
      Mar        30,000
     NULL        60,000  -- a total due to `WITH ROLLUP`
    

6voto

p.campbell Points 42771

Il existe plusieurs façons d'obtenir une date sans partie horaire; en voici une qui est assez performante:

 SELECT CAST(FLOOR(CAST(getdate() AS FLOAT))AS DATETIME) 
 

En effet pour SQL Server 2008:

 SELECT CAST(getdate() AS DATE) AS TodaysDate
 

6voto

jr3 Points 572

FUSIONNER() , il accepte les champs et une valeur à utiliser au cas où les champs sont nuls. Par exemple, si vous avez une table avec la ville, État, code Postal, vous pouvez utiliser FUSIONNENT() pour renvoyer les adresses comme de simples chaînes de caractères, c'est à dire:

Ville | État | Code Postal

Houston | Texas | 77058

Beaumont | Texas | NULL

NULL | Ohio | NULL

si vous exécutez cette requête sur la table:

select city + ‘  ‘ + COALESCE(State,'')+ ‘  ‘+COALESCE(Zipcode, ‘')

Serait de retour:

Houston, Texas, 77058

Beaumont, Texas

L'Ohio

Vous pouvez également l'utiliser pour pivot de données, c'est à dire:

DECLARE @addresses VARCHAR(MAX)
SELECT @addresses = select city + ‘  ‘ + COALESCE(State,'')+ ‘  ‘
+COALESCE(Zipcode, ‘')             + ‘,' FROM tb_addresses
SELECT @addresses

Serait de retour: Houston, Texas, 77058, Beaumont Au Texas, Ohio

5voto

pjp Points 7012

C'est incroyable combien de personnes travaillent sans protection avec SQL Server car elles ne connaissent pas les transactions!

 BEGIN TRAN
...
COMMIT / ROLLBACK
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X