Использование C # для выбора из таблицы базы данных SQL - PullRequest
0 голосов
/ 11 августа 2010

У меня есть список идентификаторов пользователей и открытое соединение с SQL Server. Как я могу просмотреть этот список и выбрать соответствующий идентификатор пользователя со столбцами First_Name и Last_Name? Я предполагаю, что вывод может быть в виде данных?

большое спасибо

Ответы [ 4 ]

3 голосов
/ 11 августа 2010

Это немного меняется в зависимости от того, какой тип SQL вы используете, но this и this должны помочь вам начать работу.

1 голос
/ 11 августа 2010

Напишите функцию в вашей базе данных SQL с именем ParseIntegerArray.Это должно преобразовать строку с разделителями-запятыми в таблицу идентификаторов, которую вы можете присоединить к этому в своем запросе.Это также помогает избежать любого риска внедрения SQL-кода, который можно получить при объединении строк для построения SQL-кода.Вы также можете использовать эту функцию при работе с LINQ to SQL или LINQ to Entities.

DECLARE @itemIds nvarchar(max)
SET itemIds = '1,2,3'

SELECT
    i.*
FROM
               dbo.Item AS i
    INNER JOIN dbo.ParseIntegerArray(@itemIds) AS id ON i.ItemId = id.Id
1 голос
/ 11 августа 2010

Наиболее целесообразный способ сделать это:

  1. Превратить список в строку, содержащую разделенный запятыми список значений идентификатора пользователя
  2. Предоставить CSVстрока в предложении IN, например:

    SELECT u.first_name,
           u.last_name
      FROM USER_TABLE u
     WHERE u.userid IN ([comma separated list of userids])
    

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

SELECT u.first_name,
       u.last_name
  FROM USER_TABLE u
  JOIN #userlist ul ON ul.userid = u.userid
0 голосов
/ 11 августа 2010

Эта статья должна вам помочь: http://msdn.microsoft.com/en-us/library/aa496058%28SQL.80%29.aspx

Я использовал это в прошлом для создания хранимой процедуры, принимающей один параметр varchar с разделителями-запятыми. Мой источник из программы на C # представлял собой проверенный список, и я построил строку с разделителями-запятыми, используя цикл foreach и StringBuilder для выполнения конкатенации. Хотя могут быть и лучшие методы, в зависимости от количества элементов в вашем списке.

Чтобы вернуться к части SQL, функция fn_Split, обсуждаемая в статье, позволяет преобразовать строку с разделителями-запятыми обратно в переменную таблицы, которую SQL Server может понять ... и которую можно запросить в вашей хранимой процедуре.

Вот пример:

CREATE PROCEDURE GetSelectedItems
(
@SelectedItemsID  Varchar(MAX) -- comma-separated string containing the items to select
)
AS
SELECT * FROM Items
WHERE ItemID IN (SELECT Value FROM dbo.fn_Split(@SelectedItemsIDs,','))

RETURN
GO

Обратите внимание, что вы также можете использовать внутреннее соединение вместо IN (), если хотите.

Если на вашем SQL Server нет пользовательской функции fn_Split, вы можете найти ее здесь: http://odetocode.com/Articles/365.aspx

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...