sql >> Database teknologi >  >> RDS >> Sqlserver

T-Sql ser ud til at evaluere If-sætningen, selv når betingelsen ikke er sand

SQL Server parser sætningen og validerer den og ignorerer eventuelle betingelser. Derfor fejler følgende også:

IF 1 = 1
BEGIN
  CREATE TABLE #foo(id INT);
END
ELSE
BEGIN
  CREATE TABLE #foo(id INT);
END

Uanset om du trykker på Execute eller bare Parse, resulterer dette i:

SQL Server ved ikke eller er ligeglad med, hvilken gren af ​​en betinget der skal indtastes; det validerer alligevel alle udsagn i en batch. Du kan gøre ting som (på grund af udskudt navneopløsning):

IF <something>
BEGIN
  SELECT foo FROM dbo.Table_That_Does_Not_Exist;
END

Men du kan ikke:

IF <something>
BEGIN
  SELECT column_that_does_not_exist FROM dbo.Table_That_Does;
END

Løsningen er typisk at bruge dynamisk SQL:

IF <something>
BEGIN
  DECLARE @sql NVARCHAR(MAX);
  SET @sql = N'SELECT column_that_does_not_exist FROM dbo.Table_That_Does;';
  EXEC sp_executesql @sql;
END


  1. Opdatering af JLabel via SetIcon fra bytea-datatype i postgres

  2. MySQL Pivot tabel datoer på kolonnenavn

  3. Beregn punkt 50 miles væk (nord, 45% NØ, 45% SV)

  4. Ping en MySQL-server