Параметризованное имя таблицы в запросе SQL - PullRequest
2 голосов
/ 09 сентября 2011

Я использую Vb2005, чтобы поразить сервер SQL. у меня довольно сложный запрос, который попадает на серверы с одинаково структурированными базами данных. Я искал параметризацию предложения FROM, но, похоже, не могу это сделать. вот что я пытался

    Dim sql As String = "SELECT * " & _
                        "FROM [@DB].[dbo].[Trips] AS T " & _
                        "WHERE T.DepartTime >= CONVERT(DATETIME, 'Sep 08, 2011', 120);"

    Dim cmd As New System.Data.SqlClient.SqlCommand(sql, conn)
    cmd.Parameters.Add("@DB", SqlDbType.Char)
    cmd.Parameters("@DB").Value = "DriverDb"

В зависимости от потребностей пользователей, я попаду в базы данных «DriverDb» или «MaintDb» или «DispDb». строка SQL на самом деле намного сложнее, чем со ссылками на БД в 5 местах, поэтому я хотел упростить ее, чтобы я мог просто заменить ее параметром.

Ответы [ 2 ]

2 голосов
/ 09 сентября 2011

Я думаю, мы не можем сделать это для имени БД или таблицы, которые не могут рассматриваться как параметры. Я бы предложил использовать переменную "db" и добавить к строке "sql" что-то вроде ниже

Dim db As String = "DriverDb";
Dim sql As String = "SELECT * " & _  
                    "FROM ["& db &"].[dbo].[Trips] AS T " & _                         
                     "WHERE T.DepartTime >= CONVERT(DATETIME, 'Sep 08, 2011', 120);"

Надеюсь, это поможет !!

1 голос
/ 10 сентября 2011

Кажется, что ответ на следующий вопрос довольно хорошо суммирует. Динамический SQL (передача имени таблицы в качестве параметра) Вы действительно должны избегать такого динамического SQL, если это вообще возможно.

...